繁体   English   中英

新提交不在头上

[英]New commits aren't on the head

长话短说*,我对我的git存储库做了一些我不知道该怎么做的事情,最终导致我的头松开了,也就是说,当我提交master不是最新的。

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

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

$ git branch
* (no branch)
  master
  • 更长的故事是我试图撤消某些提交,却不知道我应该怎么做。 我想那不是太久。

最简单(安全)的方法是创建一个指向您的HEAD的临时分支,检出母版,合并该临时分支,然后将其删除:

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

您还可以避免使用temp分支,而仅使用reflog从no分支获取提交:

git checkout master
git merge HEAD@{1}

HEAD@{1}指的是您先前签出的提交; HEAD@{0}与您正在处理的当前提交HEAD相同。 如果要查看HEAD指向的所有先前提交(尚未到期),可以执行以下操作:

git reflog

您说发生这种情况是因为您试图撤消提交。 正如mletterle指出的那样,您可以使用git reset进行此操作。 will set the branch you're on, HEAD, your index, and your working copy to a particular revision. git reset --hard 会将您所在的分支,HEAD,索引和工作副本设置为特定版本。 请注意,这会吹走未提交的更改,因此只有在您真正知道自己在做什么的情况下才这样做。 , which doesn't affect your working copy, and then selectively revert individual files in your working copy with git checkout , in order to ensure that you don't accidentally destroy some work you were doing. 通常更安全的做法是执行git reset ,这不会影响您的工作副本,然后使用git checkout有选择地还原工作副本中的单个文件,以确保您不会意外破坏正在执行的某些工作。

另外, git reset通常只应用于未按下的提交。 如果您要撤消已经推送的内容,并且其他人已经合并,则通常需要git revert

结束的方法很少(无分支),但实际上是一个垃圾分支,用于检查事物,例如旧提交。 如果您在(无分支)上错误地编辑了文件,则可以像更改其他分支一样切换回主文件。 查看git-checkout的帮助,但是您将需要执行git-checkout -m以移回master并合并当前索引。

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

也许您应该回到您正在处理的分支。 如果是大师,那就是

$ git checkout master

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM