我正在使用这个工作流程:
http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
他提到:“首先,在您的 master 分支 (git checkout master) 中,引入最新的更改: git pull origin master 这永远不应该创建 merge 提交,因为我们永远不会直接在 master 中工作。”
哎呀,我刚刚做到了。我不小心将几个文件的一些更改提交给了我的主人(相对于我的主题分支)。然后我意识到我的错误 - 删除了我的主题分支。现在我想摆脱我提交的更改(对主人),正确的做法是什么?我还没有 rebase 或将我的更改推送到 repo,所以它都是本地的。
本质上,我想 pull 最新版本的 master 代码,而忽略我对本地 master 所做的一切(这实际上是一次提交)。
最佳答案
如果你只是想把它扔掉,而你在你的主分支上:
git reset --hard HEAD^
此命令会将您主控的 HEAD 指针重置为上一次提交。 (您也可以说“HEAD~1”,这与 HEAD^ 的含义相同。)更一般地说,您还可以将您的 master 重置为与服务器的相同:
git reset --hard origin/master
无论 master 的状态如何(即在 origin 之前 5 次提交,或在它之后 30 次提交),这都会起作用。这些命令中的 --hard
选项意味着您的工作树中的文件也将与分支头一起重置。
额外提示
如果您处于类似的情况,您实际上想要保留您的更改,您总是可以这样做:
git fetch # This grabs changes from the server without merging them
git rebase origin
这将在服务器上的最新更改之上重播您在 master 中的所有工作。
另一种选择是为您在 master 上的工作创建一个主题分支:
git checkout -b newfeature
然后您可以切换回 master (git checkout master) 并使用我给出的第一个命令将 master 倒回一次提交。请记住,分支实际上只是存储库中提交的方便名称。例如,master
只是对该分支上最新提交的引用。您可以随意移动这些引用,并且随着您对 git 的掌握程度越来越高,您会发现自己经常这样做。
我还建议您养成在使用分支时运行 gitk --all
的习惯,这样您就可以直观地看到您在做什么。当我刚接触 git 时,我总是运行这个命令。我还是……
关于git - ReinH Git 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855266/