我创建了一个当地的混帐回购协议,在我的笔记本电脑,然后推源以选择创造一个远程支。几天之后提交和推动,我需要回滚到早期提交。这是我做了什么。

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

有人告诉我,这样做的结帐创造了一个新的工作树和不分本身,所以当我推回滚变化的选择,它所说的一切都是最新的,并且没什么被推迟。我怎么解决这个问题的情况?感谢您的帮助。

有帮助吗?

解决方案

当你结账一个直接提交名称(使用SHA-1散列的提交对象)而不是检查出来的一个分支的名字,你结束了一个"分离的头"。头是"参考",跟踪目前什么是检查出来。它变成分离时,你直接结帐时提交,而不是一个分支(它不附加任何分支)。没有分支机构时更新分离一个储存库的头部。你可能认为分离的头国家,如果你有一个匿名分支的检查。


要重新存储库的头,你会想要挽救当前的头作为一个分支,并检查支出:

  1. 拯救当前的头 新的 分这样做:

    git branch <new-branch-name>
    
  2. 复盖 现有的 分你需要使用 --force:

    git branch --force <existing-branch-name>
    
  3. 然后,重新存储库的头部通过检查出的新的/更新的分支机构:

    git checkout <branch-name>
    

    (在那里 <branch-name> 是一样的 <new-branch-name><existing-branch-name>, 根据其上述两个命令你用)

这个序列(git branch 做一个参考点,当前的头提交,然后 git checkout 更新的分支)将推进任何未提交的内容,可能有在你的工作索引和/或树。


在未来,如果你想'滚回来,目前的分支到一些先前的承诺,应该使用这个 而不是的 分离你的存储库的头:

git reset --hard <commit>

这将重置目前的分支(或分离的头,如果这已经是分离)的名提交,并使索引和工作树反映这一承诺(即它扔掉任何提交,因为该规定提交的任何未提交的内容)。

该分离的头国家是有用的,为重新讨论老的国家,有时短期工作,你不知道你会保持。其他比,你可能想避免它。

其他提示

您想重置:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top