我想回滚到先前的提交,然后发布该代码,然后回到最新的提交。
即,所以我的主人指向的是较早的提交版本,以便我可以修改该版本,然后我想回到最初是我提交的最新提交。
我怎样才能做到这一点?
Answers:
如果要执行此操作,然后将主服务器还原到上一个提交:
git checkout master~1 # Checkout previous commit on master
git checkout -b new_master # Create branch for new master
git branch -D master # Delete old master
git branch -mv new_master master # Make new_master master
或者:
git reset --hard master~1 # Reset current branch to one commit ago on master
您的问题不清楚。我认为您要的是:
git push -f origin $old_commit_id:master
这会做什么?它将推动$old_commit_id承诺origin作为新掌门origin的master分支。
如果这是您想要的,则完全不需要触摸本地master分支。
master (non-fast-forward)给我带来了失败。@jtdubs解决方案有效。
-f强制即可—尽管远程回购可能已配置为禁止这样做。我已经更新了答案。
如果您想避免强行推送,请按照以下方法将您的存储库恢复为较早的提交并保留所有介入的工作:
git checkout 307a5cd # check out the commit that you want to reset to
git checkout -b fixy # create a branch named fixy to do the work
git merge -s ours master # merge master's history without changing any files
git checkout master # switch back to master
git merge fixy # and merge in the fixed branch
git push # done, no need to force push!
做完了!将307a5cd替换为您在存储库中想要的任何提交。
(我知道前两行可以合并,但是我认为这不太清楚发生了什么事情)
这是图形化的:
c1 -- c2 -- c3 -- c4 -- c2' -- c5 ...
\ /
'------------'
您可以有效地删除c3和c4,然后将项目设置回c2。但是,如果您想再次查看c3和c4,则它们在项目的历史记录中仍然可用。
假设这样的提交图:
| (A) ---------> (B) ----------> (C)
| ^
| (master)
您要先结帐master并创建一个指向master当前位置的分支:
git checkout master
git branch pointer master
现在应该看起来像这样:
| (A) ---------> (B) ----------> (C)
| ^
| (HEAD, master, pointer)
既然您已经进入master,我们将告诉master分支向后移动一次提交:
git reset master~1
现在,master应该将其移回一个空格,但是pointer分支仍在最近的提交中:
| (A) ---------> (B) ----------> (C)
| ^ ^
| (HEAD, master) (pointer)
此时,您可以将其推master送到远程站点或任何地方,然后快速将其合并回pointer分支。您可以pointer在此时杀死分支:
git push origin master
git merge --ff-only pointer
git branch -D pointer
最后 :
| (A) ---------> (B) ----------> (C)
| ^ ^
| [ origin/master ] (HEAD, master)
git push origin master则将失败,因为当前分支的尖端在其远程对等后面。您还应该传递-f标志。
移至先前版本:
git checkout <version hash>
在这里做您的工作并与
git commit --amend
回到大师:
git checkout master
git reset --hard指出他的主分支回到旧提交,所以git checkout master什么也不会做。
commit --amend步骤足够有用
--amend啊