Git:将特定的提交移动到另一个分支

23

我有一个包含两个分支的代码库。

主分支(Master)的提交记录:

c1, c2, c3, c4, c5, c6, c7, ..., c15, ...

暂存分支(Staging)的提交记录:

c1, c2, c3, c4, c5, c6, c7

我想把主分支(Master)中c7之后的所有提交记录移动到暂存分支(Staging)中,

然后还原主分支(Master)

使用:

git reset --hard c7-hash

如何将特定的提交从一个分支移动/复制到另一个分支?


3
在这种情况下,你不需要移动提交,因为可以将暂存分支快进到主分支。 git checkout staging, git merge master, git checkout master, git reset --hard c7-hash - tewe
可能是重复的问题:如何使用git将最近提交的更改移动到新分支中? - Aaron Digulla
1个回答

49
在你所描述的情况中,即在暂存分支上的所有提交也都在主分支上时,非常容易处理:
git checkout staging
git merge master
git checkout master
git reset --hard c7-hash
合并将会是快进模式。
通常情况下,您可以使用git cherry-pick c8 c9 c10 c11 c12 c13 c14 c15来将单个提交选择粘贴到当前分支。一个更短的方法是挑选出所有在主分支上但不在当前分支上的提交:git cherry-pick ..master,还有其他示例请参见git help cherry-pick

在执行完这些操作后,假设您将x提交到主分支。然后将主分支合并到暂存分支。那么,该合并是否能够正确地将x合并到暂存分支,同时由于这些提交已经在主分支中被重置,因此不会撤销暂存分支中的c8...c15?希望确保在该合并之后,c8...c15仍留在暂存分支中。 - Marcus Leon
@MarcusLeon,合并不会撤销那些提交。那些提交在主分支中没有被撤销,而是完全删除了。重置不等于撤销。像这样创建测试提交和测试场景很容易,试试吧。 - Jonathan Wakely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接