像资深工程师一样使用Git

126 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天,点击查看活动详情

像资深工程师一样使用Git

Git是一个强大的工具, 当你知道如何使用它时, 感觉好极了.

我已经在不同的团队和项目中使用Git的这些功能多年了. 我还在围绕一些工作流程形成自己的观点(比如要不要squash), 但核心工具是强大而灵活的(而且可以编写脚本).

查阅Git日志

Git日志是开箱即用的, 很好用.

基本的git log

使用git log可以得到一些信息. 但它的粒度非常细, 并且通常不是你要找的东西.

git log

1_c98MmRRHROTav94yXKNMYw.webp git log

让我们说实话吧. 这些日志并没有给任何人留下深刻印象. 它们很无聊. 而且它们充满了你现在并不真正需要的信息. 你正试图对你的项目中所发生的事情有一个高层次的了解.

有一个更好的方法.

拥有更多可见性的git log

使用--graph--format, 我们可以快速获得项目中git提交的摘要视图.

git log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%an%C(reset)%C(bold yellow)%d%C(reset) %C(dim white)- %s%C(reset)' --all

1_4ehBjIu4R4ZpjplInGbing.webp git log --graph --format=format:’<>’ --all

哇! 这些是一些好看的日志! 旁边甚至还有一个分支树的模样.

这些日志告诉你谁在做什么, 什么时候做的修改, 以及你的修改在大局中的位置.

--graph 添加树状图到左边. 这不是最时尚的图表, 但它有助于可视化项目分支的变化.(在这里阅读文档.)

--format 让你自定义日志格式. 有预设的格式可供选择, 或者你可以像这个例子一样写你自己的格式. (阅读这里的文档.)

--all 包括日志中所有的参考文献, 标签和分支(包括远程分支). 你可能不需要所有的东西, 所以根据你的需要来调整这个(阅读这里的文档)

See the git-log docs for more information on how you can level up your git logs. →

理解特定的提交

你经常想了解某个特定的提交发生了什么. git show可以让你看到一个高层次的提交变化, 但它也可以让你看到特定文件的变化.

查看提交的概要

git show <commit> --stat

1_4Xv0zjyg7aIM7JxQI3usWg.webp git show <commit> --stat

使用--stat标志, 你会看到提交摘要. 以及改变的文件和它们如何改变的细节.

查看某次提交的具体文件变更

当你想深入了解某个特定文件的具体行数变化时, 使用git show和文件路径.

git show <commit> -- <filepath>

1_rSKMbIJtmHpGD0shauM-OQ.webp git show <commit> -- <filepath>

这将提供你的文件的具体行数变化. 默认情况下, 它将显示行的变化以及两端的3个附加行, 给你提供改变的行在文件中的上下文.

关于如何提高您对git提交的理解水平, 请参见git-show文档. →

进行修改

你在项目中建立了一个分支, 向你的分支提交了一些修改, 你准备将这些修改合并到main. 自从你建立分支后, 另一位工程师对相同的文件进行了修改. 😱

如果你使用GitHub这样的服务, 你的PR会告诉你是否有合并冲突.

0_TChg4N9xfFPE_fbS.webp GitHub merge conflict

在你把改动合并进main之前, Git会提示你解决这些合并冲突. 这很好, 因为你不希望把别人正在做的工作都踩死.

要开始在本地解决这个问题, 你通常会采取两种途径之一: mergerebase.

合并与变基

main分支上有你想纳入你的分支的改动时, 你可以merge这些改动,或者从不同的点rebase你的分支.

merge将一个分支的修改合并到另一个分支, 并在一次merge commit中完成.

git merge origin/main your-branch

rebase调整一个分支的实际分支点(即把该分支从基础分支移到一个新的起点).

git rebase origin/main your-branch

一般来说, 当上游分支(如main)有变化而你想将其纳入你的分支时,你会使用rebase.

要不要squash

我过去是个squash专家. 但是Dr. Derek Austin 🥳的文章改变了我关于squash的看法. 我推荐这篇文章, 除了他所说的, 我不认为我有什么有用的补充.

为什么我更喜欢常规的merge而不是squash来合并提交

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天,点击查看活动详情