ReinH Git工作流程

时间:2009-05-12 22:51:54

标签: git

我正在使用此工作流程:

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

他提到:“首先,在你的主分支(git checkout master)中,拉入最近的变化: git pull origin master 这永远不应该创建合并提交,因为我们永远不会直接在master中工作。“

哎呀,我刚刚做了。我不小心对我的主人(对我的主题分支)提交了一些文件的一些更改。然后我意识到我的错误 - 删除了我的主题分支。现在我想摆脱我承诺的变化(对主人来说),做什么是正确的?我还没有重新定位或将我的更改推送到repo,所以它都是本地的。

从本质上讲,我想要下载最新版本的主代码,而忽略我对本地主代码所做的一切(实际上是一次提交)。

2 个答案:

答案 0 :(得分:11)

如果你只是想扔掉它,当你在主分支上时:

git reset --hard HEAD^

此命令会将master的HEAD指针重置为上一次提交。 (你也可以说“HEAD~1”,这意味着与HEAD ^相同。)更一般地说,你也可以将你的主人重置为与服务器相同:

git reset --hard origin/master

无论master的状态如何(即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时,我一直运行命令。我还是......

答案 1 :(得分:1)

分支删除丢失的所有提交都在git中。

您可以通过遍历reflog来访问所有这些内容。看看

man git-reflog