ReinH Git工作流程

5

我正在使用这个工作流程:

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

他提到:“首先,在您的主分支(git checkout master)中,拉取最新更改:git pull origin master。这不应该创建合并提交,因为我们从未直接在主分支上工作。”

糟糕,我刚刚犯了一个错误,把几个文件的更改提交到了我的主分支(而不是我的专题分支)。然后我意识到我的错误 - 删除了我的专题分支。现在我想摆脱我对主分支的提交更改,该怎么办?我还没有重新基于或推送我的更改到存储库,所以这都是本地的。

实际上,我想下载最新版本的主代码,并忽略我对本地主代码所做的一切更改(只有一个提交)。

2个回答

11
如果你只想抛弃它,而且你正处于主分支上:
git reset --hard HEAD^

这个命令将会重置你主分支的HEAD指针到上一个提交。 (你也可以用"HEAD~1",它和HEAD^意思相同)。更普遍的情况是,你也可以将你的主分支重置为与服务器相同:

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

然后您可以切换回主分支(git checkout master),并使用我给出的第一个命令将主分支回滚到上一个提交。请记住,分支实际上只是存储在您的代码库中的提交的方便名称。例如,master只是该分支上最新提交的引用。您可以随意移动这些引用,并且随着您在Git中变得更加高级,您会发现自己经常这样做。

我还建议您养成在操作分支时运行gitk --all的习惯,以便您可以直观地查看您正在进行的操作。当我刚开始使用Git时,我经常运行此命令。我现在仍然这样做...


1

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

您可以通过遍历reflog来访问它们。请查看

man git-reflog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接