分享个人珍藏的 Git 使用技巧
除了Git的「基本」命令以外,每个人都有自己的 Git 小技巧。我想快速地写一个我自己的列表,我倾向于在我的.gitconfig
中使用别名。滚动到底部可以看到一些有趣的与git
相关的在 Git 之外运行的命令!:)
快速修复
我经常会忘记提交一个文件,或者在其中留下一个console.log
。我非常讨厌像removed console.log
这样的提交。因此,如果我添加一个文件要提交运行的时候:
git commit --amend --reuse-message HEAD
它将文件添加到最后一次提交并重用旧的提交消息。我把这个称为git amend
用于快速修复。
注意 根据下面的反馈,执行git commit --amend --no-edit
也可以起到相同的效果。
在 origin/master 上重新设立起点
较老的分支经常落后很远, 远到我必须尽快消除构建错误、 CI 错误或仅解决冲突. 我最喜欢的是像下面这样做:
git fetch origin # 获取最新的来源
git rebase origin/master
这样,我就把当前的分支提交叠加到主分支的最新版本之上了!
上次提交
有时,git log
会让人不知所措。由于我经常使用前面提到的amend
命令,我倾向于只查看 Git 日志中的最后一次提交:
git log -1
还原一个文件的旧版本 (比如锁文件!)
偶尔,我会弄坏一份与我的分支无关的文件,大多数情况下,锁文件(mix.lock, package-lock.json 等等)都会发生这种情况。我只是将文件「重置」回旧版本,而不是还原可能包含一堆其他内容的提交
git checkout hash-goes-here mix.lock
然后我就可以提交这次修改了!
筛选
我偶尔使用的一种被低估的命令。当一个分支变得陈旧时,有时从它那里得到你真正需要的东西比试图让整个分支跟上速度要容易得多。一个很好的例子,对我来说,是涉及不再需要的UI/后端代码的分支。在这种情况下,我可能只想从分支中选择某些提交
git cherry-pick hash-goes-here
这会神奇的把你需要的提交带到你所在的分支上。你也可以选择一个列表!
git cherry-pick first-hash second-hash third-hash
你还可以选择一个范围
git cherry-pick first-hash..last-hash
参考日志
这是一个强大的用户功能,我很少使用它。我的意思是,一年一次!但是了解这个功能还是很好的。有时,我会丢失一些提交。我删除了一个分支或重置或修改了一个我不是故意要搞砸的提交。
在这些情况下,知道有reflog
这个功能是很好的。它不是你所在分支的单个提交日志,而是你所有提交的日志——甚至是那些删掉的分支上的提交。然而,日志会时不时地被清空(删减),以便只保留相关信息。
git reflog
这个命令返回一个日志,它的用处是在一个提交的基础上进行筛选(cherry-pick)或者重新定位(rebase)。当你配合grep
使用时它是非常强大的。
Bash 命令别名
除了 Git 指令集,我还喜欢使用一些有趣的 bash 别名来帮助我的工作流程
当前分支
要获取当前分支的名称,我有以下别名:
alias git-branch="git branch | sed -n -e 's/^\* \(.*\)/\1/p'"
当我在另一个命令中运行git-branch
或者$(git-branch)
时,我将获得当前所在分支的名称。
注意 根据评论中的反馈,我将其转换为git symbolic-ref --short HEAD
,它也可以正常工作,只是您可以在字面上读懂它了。
跟踪上游分支
虽然我确信这在.gitconfig
中是可行的,但我还没有弄清楚如何实现。当我在一个新的分支上运行第一次push时,我总是被要求设置该分支以进行上游跟踪。这是我的别名:
alias git-up="git branch | sed -n -e 's/^\* \(.*\)/\1/p' | xargs git push -u origin "
现在当我运行git-up
时,我推送当前分支并设置上游跟踪!
反馈
基于评论中的一些非常有用的反馈,我对我正在使用的东西做了一些调整。
当前分支
看起来有很多新方法可以得到当前的分支名称。如果向上滚动,您将看到我使用了一个疯狂的 sed
解析命令来获取分支名称。
这是我的新选择:
alias git-branch="git symbolic-ref --short HEAD"
而且它看起来和你预期的完全一样!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。