我如何将我最近的承诺转移到一个新的分支机构,并在这些承诺完成之前重新定义主? 例如:
master A - B - C - D - E
为此:
newbranch C - D - E
/
master A - B
我如何将我最近的承诺转移到一个新的分支机构,并在这些承诺完成之前重新定义主? 例如:
master A - B - C - D - E
为此:
newbranch C - D - E
/
master A - B
当前回答
要做到这一点,而不重写历史(即如果您已经推出了承诺):
git checkout master
git revert <commitID(s)>
git checkout -b new-branch
git cherry-pick <commitID(s)>
那么,两支分支都可以在没有武力的情况下被推动!
其他回答
如果你只需要将所有的无缝承诺转移到一个新的分支,那么你只需要,
创建一个新的分支从当前一个 :git 分支新分支名 推你的新分支: git 推起源新分支名 转换你的旧(当前)分支到最后一个推 / 稳定状态: git 重新设置 - 硬起源 / 旧分支名
有些人也有其他上流而不是起源,他们应该使用适当的上流。
在一般...
由 sykora 曝光的方法是最好的选择,但有时不是最简单的方法,而且不是一般的方法。
为了实现OP想要的,它的2步过程:
步骤1 - 注意你想要的新行业的主人的承诺
执行
git checkout master
git log
在这里我将使用: C 承诺: 9aa1233 D 承诺: 453ac3d E 承诺: 612ecb3
注意:您可以使用前七个字符或整个承诺字符。
步骤2 - 把它们放在新行业
git checkout newbranch
git cherry-pick 612ecb3
git cherry-pick 453ac3d
git cherry-pick 9aa1233
或(在 Git 1.7.2 + 上,使用范围)
git checkout newbranch
git cherry-pick 612ecb3~1..9aa1233
git cherry-pick 适用于新行业的这三个承诺。
只有在这种情况下:
Branch one: A B C D E F J L M
\ (Merge)
Branch two: G I K N
我表演了:
git branch newbranch
git reset --hard HEAD~8
git checkout newbranch
我希望承诺我会成为头,但承诺是现在的。
要确保在历史上登上正确的位置,就更容易与承诺的哈希工作。
git branch newbranch
git reset --hard #########
git checkout newbranch
我很惊讶,没有人这样推荐:
git checkout master
git checkout <commit hash from which you want to split>
git checkout -b new_branch
git rebase master
git checkout master
git reset --hard <commit hash you splitted>
要解释:
步骤我们检查的承诺,我们想要分裂,然后从这个承诺创建一个新的分支,做 rebase 将同步 new_branch 和 master. 因此,现在我们有两个相同的分支与同样的承诺重新设置在 master,我们清理后分裂列表项目后最后的承诺
TLDR
git checkout branch_to_remove_commits
git reset --hard ${hash_of_new_tip}
git checkout -b branch_to_store_commits
# Move commits (single hash, list of hashes or range ffaa..ffoo)
git cherry-pick ${commit_hash}
git push --set-upstream origin branch_to_store_commits
# Switch back to last branch
git checkout -
git push -f
為我
git log --pretty=oneline -n ${NUMBER}
最好的工作是识别所涉及的承诺哈希。