我的个人 Git 技巧备忘单
除了 Git 的“基本”命令之外,每个人都有自己常用的 Git 小技巧。我想快速整理一下我自己常用的 Git 小技巧,并将它们添加到我的 .gitignore 中.gitconfig
。滚动到底部,查看一些git
在 git 之外运行的有趣相关命令!:)
快速修改
我经常忘记提交文件,或者漏掉console.log
。我特别讨厌这样的提交removed console.log
。所以我会像要提交一样添加文件,然后运行:
git commit --amend --reuse-message HEAD
这会将文件添加到最后一次提交,并重用旧的提交消息。我将其命名为git amend
“quickfixes”
注意根据下面的反馈,也可以达到git commit --amend --no-edit
同样的效果。
在 origin/master 之上进行 rebase
较旧的分支经常会落后很多,以至于我必须加快速度来消除构建错误、CI 错误,或者只是解决冲突。我最喜欢做的事情是:
git fetch origin # fetch latest origin
git rebase origin/master
这样,我就将当前分支提交堆叠在最新版本的 master 之上!
最后一次提交
有时候,这git log
真的让人不知所措。由于我经常使用上述amend
命令,我倾向于只查看 git log 中的最后一个提交:
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-picking 或 rebasing。当你输入 时,它非常强大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
,但我还没弄清楚如何操作。当我第一次在新分支上运行推送时,总是会被要求设置分支以进行上游跟踪。这是我为此设置的别名:
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"
并且它似乎正如您所期望的那样工作!
文章来源:https://dev.to/antjanus/my-personal-git-tricks-cheatsheet-23j1