场景一览:
- 我的上个 commit log 写错了怎么办?
- 我刚刚的提交忘了 add 改动文件了怎么办?
- 本来应该新建分支的,但是我不小心 commit 进 master 分支了怎么办?
- 我不小心 commit 进错误的分支了怎么办?
- 咦,怎么我的 git diff 没反应?
- 我刚刚一顿操作猛如虎,git 出错一团糊,好想回到过去,怎么造时光机器?
- 究级奥义,以上方法都不奏效怎么办?
1、我的上个 commit log 写错了怎么办?
当你和同事在微信上吐槽你的领导,边说边笑顺便按了回车提交了你的代码,突然你意识到,刚刚你把要发给同事的吐槽写到了 commit log 中。你的职业生涯突然面临第一次危机!
解决办法:
git commit --amend
# 你的文本编辑器会打开,赶紧输入你的log
2、我刚刚的提交忘了 add 改动文件了怎么办?
你刚刚完成了一个超棒的功能,赶紧提交上去和同事炫耀一下,你愉快地 commit 完代码后突然意识到刚刚忘了把你改动的文件 add 上去了。这时候是新建一个提交还是……
解决办法:
当然是可以重新修改他们啦,只要两行命令就可以了。
git add . # 或者其它改动的文件
git commit --amend
# 保持你的提交就可以啦
3、本来应该新建分支的,但是我不小心 commit 进 master 分支了怎么办?
但愿你还没 git push,不然这个方法就不起作用了,不管你是不是 commit 进 master 分支,这个方法都适用。一般我们都会在各种新分支上搞事情,主分支要求保持代码稳定,所以这时候你应该这么做。
解决方案:
# 以当前改动创建新分支
git branch some-new-branch-name
# 将之前的提交重置
git reset HEAD~ --hard
git checkout some-new-branch-name
# 万幸,现在你的 commit 完好无损
4、我不小心 commit 进错误的分支了怎么办?
同上,但愿你还没 git push,现在你的目的不是新建分支,而是提交到其它分支去。所以你应该这么做。
解决方案 1:
# 取消上个 commit,但是保留文件修改
git reset HEAD~ --soft
git stash
# 进入正确的分支
git checkout name-of-the-correct-branch
git stash pop
git add . # 或者其它修改文件
git commit -m "your message here"
# 你的修改已经 commit 到了正确目录了
解决方案 2:
哦不,太长了记不住,那就试试这个 cherry-pick 版本:
# 切换到正确branch
git checkout name-of-the-correct-branch
# 将刚刚的 commit 扔到当前branch
git cherry-pick master
# 用 reset 丢弃你之前的改动
git checkout master
git reset HEAD~ --hard
5、咦,怎么我的 git diff 没反应?
是的,git 的 diff 命令不会检查已经放入 staging 区域的文件。所以解决方法是:
git diff --staged
6、我刚刚一顿操作猛如虎,git 出错一团糊,好想回到过去,怎么造时光机器?
你需要一个后悔药,但是你并没有小叮当。看着黑框框的一大串英文,你内心奔溃了。
别怕,git 可以这么做:
git reflog
# 在你眼前的是你用 git 命令的所有历史
# 每一条历史都有一个序号index,表示为 HEAD@{index}
# 找到你刚刚闯祸的那条命令 index
git reset HEAD@{index}
# 恢复,神奇时光机
7、究级奥义,以上方法都不奏效怎么办?
是的,我发现打死我也提交不上去,也拉不下代码来,你意识到,你的职业生涯面临着史上最大最惨的危机。你再也不能仅仅看这个急救手册了,但是,你发现你来不及了,来不及从零开始学习 git ……生存还是死亡,怎么办?
好吧,建议你这么做:
cd ..
sudo rm -r fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
cd fucking-git-repo-dir