新的提交不在头上

Jef*_*rth 3 git version-control branch

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

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

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

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

Bri*_*ell 5

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

git branch temp
git checkout master
git merge temp
git branch -d temp
Run Code Online (Sandbox Code Playgroud)

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

git checkout master
git merge HEAD@{1}
Run Code Online (Sandbox Code Playgroud)

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

git reflog
Run Code Online (Sandbox Code Playgroud)

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

此外,git reset通常只应在未提交的提交中使用.如果你试图撤消已被推送的东西,而其他人已经合并,你通常会想要git revert.