在实际工作中,几乎所有的公司都用Git来管理代码。实际中的Git往往不像教程那样简单,仅仅是pull、push、merge是远远不能解决问题的。而Git一旦出了问题往往需要很多时间去Fix。为了避免这些人为错误,本文列举了一些实际工作中出现的Git的问题,可以避免更严重的情况发生。
本文翻译自:
Oh, shit, git!ohshitgit.comGit很难:搞砸很容易,弄清楚如何解决你的错误是不可能的。 Git文档有这个鸡和蛋的问题,你无法搜索如何让自己摆脱困境,除非你已经知道如何精确描述解决你的问题需要知道的事情。
所以这里有一些我自己陷入的糟糕情况,以及用人话说明我最终是如何将自己从这些情况中解脱出来的。
我做了一件非常糟糕的事,请告诉我git有一台神奇的时间机器
git
您可以使用它来获取意外删除的内容,或者仅删除您尝试的导致Repo破坏的某些内容,或者在错误的合并恢复,或者只是回到一切都没问题的时间点。我经常使用reflog。很多很多很多人建议添加它!
我提交了一个Commit并立即意识到我需要做一个小更改
#做出改变
git add . # or add individual files
git commit --amend
#根据提示更改或保留提交消息
#现在你的上次提交包含了这个改变!
这通常发生在我身上,如果我提交,然后运行tests / linters... 日,我没有在等号之后放置一个空格。您也可以将更改作为新提交进行,然后执行rebase -i将它们压缩在一起,但上述方法大约快一百万倍。
我需要更改上次提交时的消息
git commit --amend
#根据提示更改Commit消息
愚蠢的提交邮件格式要求。
我不小心向Master上Commit了一些应该在一个全新的分支上的东西
#从当前master状态创建一个新分支
git branch some-new-branch-name
#从主分支中删除提交
git reset HEAD~ - hard
git checkout some-new-branch-name
#你的提交现在已经在这个分支:)
注意:如果你已经推送到线上,这不起作用。如果你先尝试了什么其他的东西,你可能需要git reset HEAD@{number}而不是HEAD~。这是一个悲伤的故事。此外,许多人建议了一种我不知道的很棒的方法来缩短它,谢谢!
我不小心Commit到了错误的分支
#撤消上次提交,但保留更改
git reset HEAD~ --soft
git stash
#移动到正确的分支
git checkout name-of-correct-branch
git stash pop
git add. #或添加单个文件
git commit -m “你的消息在这里”
#现在您的更改位于正确的分支上
很多人也建议在这种情况下使用cherry-pick,所以请选择你最能理解的操作
git checkout name-of-correct-branch
#抓住最后一次提交到master
git cherry-pick master
#从master中删除它
git checkout master
git reset HEAD~ - hard
我试图运行diff,但什么都没发生
git diff --staged
如果没有此标志,Git将不会对已添加到暂存区域的文件进行diff操作。¯ _(ツ)_ /¯(是的,这是一个功能,不是一个bug,但是第一次发生在你身上时,它是令人困惑和不明显的!)
一团糟,我放弃了
cd ..
sudo rm -r fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
cd fucking-git-repo-dir
从头再来,感谢Eric V.提供了这个
以上这些问题,几乎我也在工作中全部遇到过,有些是自己搞出来的,有些是别人的问题。希望这篇文章能对减少Git的问题有一点帮助,谢谢!