2009-08-30 63 views
2

使用MSYSGIT历史浏览器,我签出了一个特定的提交。 这是一个错误 - 我试图查看这些文件,并认为我必须检查它们才能看到它们。撤消在GIT结帐

从那时起,我一直无法推送任何更多的提交到我的远程回购(在GITHub上)。我有点理解,但不完全。 [我承认并不完全了解结帐的工作方式,请在小菜点上温和点。]

如何撤消结帐并使事情恢复到之前的状态?

如果我右键点击“签出”提交,我可以选择'删除此分支'。这会删除该提交的文件[坏]还是撤消检出?我吠叫错了树吗?

回答

7

我的理解是,你不小心签出了一个早期的提交,然后在你想保留的提交之上做了新的提交。首先,确保你有一个指针,以你现在的工作:

git checkout -b newbranch 

然后,结帐你在哪里之前:

git checkout master 

希望这将让你回到你的主线分支,你可以推到GitHub上像平常一样。如果再想在你所做的更改拉,就可以合并,(一旦你高兴)删除临时分支:

git merge newbranch 
git branch -d newbranch 
+0

如果你不想合并整个newbranch,你也可以选择cherry提交单个提交。 – Benno 2009-08-30 12:15:19

+0

另外,如果其他人已将提交添加到远程主服务器,您将无法将主服务器推送到远程服务器。在那种情况下,做'git pull',然后'git push'应该可以工作。 – 2009-08-30 12:59:52

+0

干得好!那样做了! [尽管这个问题还不是很清楚。]但我仍然好奇:如果我在msysgit历史浏览器中按下“删除此分支”,会发生什么?它会删除文件吗?甚至是在该文件之后做出的所有提交? – SamGoody 2009-08-31 07:21:07

0

分支基本上是一个指针,用C++术语。

您可能想尝试移动分支以指向不同的提交。为此,请使用git reset

git checkout mybranch 
git reset mypreviouscommit 

这不会删除该承诺,但它确实让mybranch“点” mypreviouscommit。所以,mypreviouscommit会在master

+0

要验证我是否正确理解 - 签出的提交的位置是2e968f,并且我已经添加了另一个提交2a45b0。我现在做“git reset 2e968f”,我应该像以前那样搞砸了,没有检出提交,2a45b0是最新的常规提交。 – SamGoody 2009-08-30 09:51:05

+0

试图重置抛出一个错误。致命:无法解析对象'2e968fd7bf2018680856316e3133c610284d9619'。请帮忙。 – SamGoody 2009-08-30 09:55:43

-1

如果你不介意失去您所做的所有更改自上次拉来Github上,你可以简单地删除一个新鲜的,新的目录和

git clone ... 

+1

我不介意丢失我的其他提交,但它是一个记住的想法。顺便说一下,我发现这种态度在GIT中非常普遍(例如,我今天接触到了这个评论:“有趣,从来没有面对过这个问题,因为我定期从主服务器重新创建我的分支,正确的做法很多,特别是如果你有很多的贡献,但嘿...“[这不是一个非常悲伤的反映使用GIT的不切实际?!] – SamGoody 2009-08-31 07:27:24