Git Branch新手 - 如何扭转?

时间:2011-04-27 14:32:30

标签: git git-branch git-revert

不确定这是否是使用分支机构的正确方法。

  • 我在结构A上有这个应用程序。
  • 当我在那个结构A上时,我创建了一个分支Z(但我在主分支上保持自己的工作)。
  • 在工作时(在主分支上),我改变了这个结构,最终弄乱了所有东西。 :)
  • 我从未提交过,也没有将这些新文件添加到代表。

请求:

  • 我需要恢复上次提交时存在的结构。还原所有未提交的更改,并删除可能已添加的新文件和文件夹。

如何做到这一点?

3 个答案:

答案 0 :(得分:10)

如果您创建了一个单独的分支,那么您需要做的就是切换回之前的分支:git checkout A(假设A是您所在分支的名称在......或者可能是master)。

如果需要,可以使用git branch -d <branchname>删除坏分支,如果有未合并的提交,也可以输入-f

编辑:如果您的存储库包含许多要删除的错误更改,则可以使用git reset --hard HEAD撤消它们。如果有新文件(未通过git跟踪),git clean -fd将全部删除它们。显然,请谨慎使用,因为它们无法通过git恢复。

答案 1 :(得分:4)

  

我需要反转到分支Z

上的结构A“快照”
$ git checkout A
$ git branch -d Z
$ git branch Z
$ git reset --hard HEAD~3
$ git checkout Z

英文:

删除“Z”分支并从当前状态“A”重新创建。

将A分支重置为三次提交。这是一个例子 - 三个可能不是你历史上重新设置的正确深度。将该数字更改为正确的数字(并使用git log来确定您的分支机构分歧的提交数量。)

切换到您的Z分支并确认您之前在“A”中的更改现在位于“Z”。

答案 2 :(得分:3)

我怀疑您只创建了分支:

git branch Z

当你实际上想要创建它并切换到它时。您可以使用-b标志来git checkout创建一个分支并切换到它,如下所示:

git checkout -b Z

您现在需要做的是撤消已提交给主分支的更改。这将撤消提交并使索引看起来就像您提交之前一样:

git checkout master
git reset --soft HEAD^

然后切换到Z并提交索引中的更改(已经暂存):

git checkout Z
git commit -m "blah blah"

希望这会有所帮助。

哦,是的,避免直接在master上工作,除非这是一个简单的bug修复。


  

请保留你的答案,因为它   包含我必须的重要概念   了解。那没用。我是什么   需要的是:抓住分支Z并放置它   作为主人 - 这有可能吗?

当然是。你可以用很多不同的方式做到这一点。如果只有一个提交,您可以将Z分支合并到master中以将该提交转换为master。但我假设你根本不想在Z分支上提交。然后你可以做同样但切换分支,例如:

git checkout Z
git reset --soft HEAD^
git checkout master
git commit -m "blah blah"