Oh! 让人抓狂的git!
Git很难:因为搞砸了很容易,但是找到如何修复错误的方法缺很难。Git官方的文档,存在“先有鸡还是先有蛋”的问题——除非你知道解决问题的方法的特定名字,否则很难查询到解决方案并顺利的解决自己的问题。
所以,下面是我自己曾经遇到的一些十分糟糕的场景,并且我最终解决了这些问题,下面就用最通俗的话介绍一下。
Oh shit,我做了一件大错事!请告诉我Git有时间机器这样的东西!
git reflog #你会看到通过git提交的每一项内容的清单列表,包含所有的分支 #每一项提交都有自己的索引:HEAD@{index} #找到你误提交的前一个分支 git reset HEAD@{index} #神奇的时光机!
你可以通过这种方式来恢复误删除的内容,也可以移除导致目录错乱的提交,或者恢复一个糟糕的合并,或者只是回退到某个所有的事情都是ok的时间点。我平时大量的使用relog,这个一定要告诉更多的人!
Oh shit,提交之后我才意识到还需要做一个小改动!
#做你的改动 git add . # or add individual files git commit --amend #根据提示修改或者保留提交信息 #这时,你的上一次提交就包含本次变动啦
这种情景经常在我提交之后发生,然后我特喵的还要运行一些脚本……这个就不多提了,说多了都是泪。你也可以把这个改变作为一个新提交,然后执行rebase -i把两个提交揉成一起,但是最开始提到的方法大概要快很多。
Oh shit,我需要调整我上一次提交的信息!
git commit --amend #根据提示来保留或者改变提交信息
对提交信息的格式,这特么的有个愚蠢的要求。
Oh shit,我误将应当提交到一个新分支的内容提交master上了!
#创建一个基于master的当前状态的新分支 git branch some-new-branch-name #移除到master上的提交 git reset HEAD~ --hard git checkout some-new-branch-name #现在你的提交仅存在在这个新分支中啦 :)
注意:如果你已经将提交push到远端,则这个方法不会生效,如果你已经尝试了其他方法,可能你需要先git reset HEAD@{number}而不是HEAD~。此外,很多人建议了这个更短但是更炫酷的方法,而我自己之前并不知道~感谢大家!
Oh shit,我不小心提交到错误的分支上了!
#撤销上一次提交,但是保留变更可用 git reset HEAD~ --soft git stash #转移到正确的分支上 git checkout name-of-the-correct-branch git stash pop git add . # or add individual files git commit -m "your message here" #现在,你的变更已经在正确的分支上啦
对于这种场景,很多人建议使用筛选——cherry-pick,所以你需要保证筛选出来的提交是对你最有意义的。
git checkout name-of-the-correct-branch #找到上一个提交到master的提交 git cherry-pick master #在master上删除它 git checkout master git reset HEAD~ --hard
Oh shit,我想运行一下diff,但是啥效果也没有?
git diff --staged
如果不使用–staged,git不会对比已经add-ed的文件之间的差异。
妈的智商,我放弃了……
cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir
爱咋咋,直接删除重新clone!(手动doge脸)
本文文字及图片出自 www.jointforce.com
你也许感兴趣的:
- 理解 git blame:一篇简介
- 【外评】为什么 Facebook 不使用 Git
- 【外评】Git 的故事:这次没那么有趣
- 【程序员搞笑图片】最刺激的话
- BitKeeper、Linux 和许可纠纷:Linus 如何在 14 天内写出 Git
- 【程序员搞笑图片】Git 音乐播放清单
- 您应该使用的现代 Git 命令和功能
- 在版本控制方面,我们能做得比 Git 更好吗?
- Git 2.40 发布,包括 git jump 工具的更新、cat-file 工具的增强以及提高 Windows 上响应速度
- 告别SVN,Git成“独苗”:GitHub 在 13 年后宣布淘汰Subversion支持
你对本文的反应是: