如何取消对master的提交并将它们移动到分支

时间:2012-03-12 01:50:59

标签: git branch commit

我遇到了问题。我在master上做过几次提交。但我犯了一个错误。我需要在branch_a上做这些提交。如何取消master上的提交并将它们移动到branch_a。

3 个答案:

答案 0 :(得分:2)

假设没有其他人已经看到您对主人的更改并在他们之上构建了一些内容:

git checkout branch_a
git cherry-pick <commit sha>   # for each commit you want on branch a
git checkout master
git reset <commit sha you want to move master back to>

如果某人已经已经在您的意外主提交之上构建了内容,那么您需要git revert他们而不是reset

答案 1 :(得分:2)

如果你只是有几个提交,那么樱桃选择它们可能是最简单的选择。您可以通过git log master找到提交的哈希值。然后执行以下操作。

git checkout branch_a
git cherry-pick COMMIT_HASH_1
git cherry-pick COMMIT_HASH_2
...
git checkout master
git reset --hard COMMIT_HASH_BEFORE

所有COMMIT_HASH_#是您希望移至branch_a的提交,而COMMIT_HASH_BEFORE是您错误提交之前的提交哈希。 (请注意,这将丢弃工作目录中任何未提交的更改。)

请注意,如果您已将更改推送到master并且其他人可能已经使用了分支,那么您将希望git revert提交您选择的相同提交,否则您'会给在分支机构工作的其他人带来问题。 (Revert只是创建一个撤消先前提交的新提交。)

答案 2 :(得分:1)

最好的事情是重置主分支但保留您的更改。使用cherry-pick会使repo受到新的提交。假设你做了两次提交:

git checkout master
git reset --soft HEAD~2
git checkout branch_a
git commit -m "foo"

使用--soft重置意味着您的更改将保持暂存状态,并且将git置于提交之前的状态,因此您只需切换分支并重新提交更改。