Git结帐<sha>和Heroku </sha>

时间:2010-03-18 03:49:25

标签: ruby-on-rails git heroku

我在笔记本电脑上创建了一个本地Git仓库,然后将源推送到Heroku创建一个远程分支。经过几天的提交和推送,我需要回滚到之前的提交。这就是我所做的。

cd <app root>
git checkout 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73 

有人告诉我,结帐时创建了一个新的工作树而不是分支本身,所以当我将回滚更改推送到Heroku时,它说所有内容都是最新的,没有任何内容被推送。我该如何解决这种情况?感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

当您签出直接提交名称(使用提交对象的SHA-1哈希)而不是签出分支名称时,最终会得到“分离的HEAD”。 HEAD是“ref”,用于跟踪当前检出的内容。当您直接签出提交而不是分支(它没有附加到任何分支)时,它会分离。分离存储库的HEAD时,不会更新分支。您可能会想到分离的头状态,就好像您已签出匿名分支一样。


要重新附加存储库的HEAD,您需要将当前HEAD保存为分支并检查该分支:

  1. 要将当前HEAD保存在分支中,请执行以下操作:

    git branch <new-branch-name>
    
  2. 要覆盖现有分支,您需要使用--force

    git branch --force <existing-branch-name>
    
  3. 然后,通过签出新的/更新的分支重新附加您的存储库的HEAD:

    git checkout <branch-name>
    

    (其中<branch-name><new-branch-name><existing-branch-name>相同,具体取决于您使用的上述两个命令中的哪一个

  4. 此序列(git branch使ref指向当前HEAD提交,然后git checkout更新分支)将继承您在工作索引和/或树中可能具有的任何未提交内容


    将来,如果您想将当前分支“回滚”到之前的某个提交,您应该使用而不是来分离您的存储库的HEAD:

    git reset --hard <commit>
    

    这会将当前分支(或分离的HEAD,如果它已经分离)重置为命名提交,并使索引和工作树反映该提交(即它抛弃了自指定提交以来的任何提交)任何未提交的内容)。

    分离的HEAD状态对于重新访问旧状态很有用,有时对于您不确定要保留的短期工作。除此之外你可能想避免它。

答案 1 :(得分:2)

您想要重置:

git reset --hard 35fbd894eef3e114c814cc3c7ac7bb50b28f6b73