我在git中犯的常见错误是
如何取回,并将编辑提交到正确的分支?
答案 0 :(得分:4)
rebase --onto
可以在这里提供帮助,特别是如果你有一系列的提交可以撤回。
不要忘记git stash
来保存与“wrongBranch
”(正确应用提交的那个)相关的当前未提交的更改,以便在结束时弹出它们。过程
基本上,您需要应用提交或提交范围to another branch(此处称为“rightBranch
”):
# Checkout the right branch where the commit should have been applied
git checkout rightBranch
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the rightBranch branch to the head of patchset which should have been on rightBranch
git branch -f rightBranch last_SHA-1_of_commits_for_rightBranch
# Rebase the patchset onto tmp, the old location of rightBranch
git rebase --onto tmp first_SHA-1_of_commits_for_rightBranch~1 rightBranch
(first_SHA-1_of_commits_for_rightBranch~1
是first_SHA-1_of_commits_for_rightBranch
的父提交,即提交右侧分支的所有提交都被错误地应用的提交。
rightBranch
将再次位于顶部:
tmp
分支指出)wrongBranch
,刚刚在tmp
(tmp
是之前的rightBranch HEAD
)重播。然后,您可以将wrongBranch
重置为之前的某些提交。
git checkout wrongBranch
git reset --hard some_older_commit
# if needed, re-apply what you were working on vefore this all proccess
git stash pop
警告:
wrongBranch
已经发布(推送到公共回购站),对于那些拉动该回购的人来说可能会很尴尬(必须在“新”分支之上修改所有更改)答案 1 :(得分:0)
签出提交所在的错误分支
git checkout wrong_branch
在错误的分支中,重置为上一次提交:
git reset --hard HEAD^
注意:指示前一次提交的^运算符,删除多次提交使用~N,其中N是提交次数
结帐到提交应该在
的分支git checkout right_branch
使用cherry-pick
重新提交提交git cherry-pick wrong_branch@{1}
注意:wrong_branch @ {1}是执行git reset命令之前的最后一次提交wrong_branch ,例如,在这种情况下也可以使用HEAD @ {2}
要移动多个提交,您可以使用多次调用git cherry-pick或只执行一次git rebase:
git rebase --onto right_branch wrong_branch@{1}~N wrong_branch@{1}
(在这种情况下,重置的相应参数将是HEAD~N)
答案 2 :(得分:0)
简单回答?
git checkout branch_with_wrong_tip
git reset HEAD~1 (or whatever number of commits you want to go back)
git checkout correct_branch
git commit ...etc
请注意重要部分,即软重置(保留更改),而不是任何硬重置,这可能会让您失去更改位置。
这也会将您重置的所有提交恢复为您必须单独或作为一组重新发送的更改。例如。如果你git重置HEAD~10,你将不得不提交所有那些在10次提交中提交的文件,或者将它们整合到一个全新的提交中。当然,这就是你使用这种方法。