新的提交不在头上

时间:2010-01-07 00:07:30

标签: git version-control branch

长话短说*,我用我的git存储库做了一些我不知道该怎么做的事情,并最终解开了我的脑袋,也就是说,当我提交时master不是最新的

我该如何解决这个问题?我必须合并吗? (如果是这样,我想要运行的确切命令是什么?)

当我运行git branch时,它告诉我我目前没有分支

$ git branch
* (no branch)
  master
  • 更长的故事是我试图撤消一些提交,并且不知道我应该怎么做。我想这不会太长。

4 个答案:

答案 0 :(得分:5)

最简单(安全)的方法是创建一个指向你的HEAD,checkout master的临时分支,合并临时分支,然后删除它:

git branch temp
git checkout master
git merge temp
git branch -d temp

您也可以避免使用临时分支,只需使用reflog从无分支获取提交:

git checkout master
git merge HEAD@{1}

HEAD@{1}这里指的是您之前签出的提交; HEAD@{0}HEAD相同,是您正在使用的当前提交。如果您想查看HEAD指向的所有先前提交(尚未过期),您可以执行以下操作:

git reflog

你说这是因为你试图撤消提交。正如mletterle指出的那样,您可以使用git reset执行此操作。 git reset --hard rev会将您所在的分支,HEAD,索引和工作副本设置为特定修订版。请注意,这会消除未提交的更改,因此只有在您确实知道自己在做什么的情况下才会这样做。更安全通常是git reset rev,这不会影响您的工作副本,然后选择性地使用git checkout还原工作副本中的单个文件,以确保您不会意外破坏某些文件你正在做的工作。

此外,git reset通常只应用于未提交的提交。如果您尝试撤消已推送的内容,而其他人已合并,则通常需要git revert

答案 1 :(得分:2)

你可以通过几种方式结束(没有分支),但实质上它是用于检查事物的垃圾分支,例如旧的承诺。如果您错误地编辑了文件(无分支),您可以像切换任何其他分支一样切换回主文件。查看git-checkout的帮助,但是你想要做一些像git-checkout -m这样的事情来回到master并将你当前的索引与它合并。

答案 2 :(得分:1)

我喜欢Brian Campbell的回答。至于撤消提交,git reset --hard rev应该是你想要的。 http://git-scm.com/docs/git-reset

答案 3 :(得分:0)

也许您应该回到您正在处理的分支机构。如果它是主人那将是

$ git checkout master