让我们假设我们有这样的提交历史:
A---B---C (master)
\
D---E (branch)
我们希望将提交B和C压缩为它们的组合B / C,然后我们想要在新的组合提交上重新绑定“分支”,即我们想要获得这样的东西:
A---(B/C) (master)
\
D---E (branch)
有可能获得吗? 你能建议我这样做吗?
答案 0 :(得分:2)
您需要执行以下操作:
git checkout master
git rebase -i commit_A master
在哪里' commit_A'是提交A的哈希。
在交互式会话中,为提交C选择squash
。
它将创建以下结构:
* 63de888 (HEAD, master) B/C
| * cd56322 (branch) E
| * 9cb2dd6 D
| * 544fa17 B
|/
* 2fc2859 A
然后,重新分支分支:
git checkout branch
git rebase master
结果应如下所示:
* a14e4d6 (HEAD, branch) E
* dc64709 D
* 63de888 (master) B/C
* 2fc2859 A
我使用以下脚本来验证步骤:
#! /bin/bash
set -eu
create-commit () {
touch $1
git add $1
git commit -m $1
}
mkdir 0
cd 0
git init
create-commit A
create-commit B
git checkout -b branch
create-commit D
create-commit E
git checkout master
create-commit C
git log --oneline --graph --all --decorate | grep .
commit_A=$(git log --all | grep -B4 '^ A' | head -n1)
commit_A=${commit_A#* }
echo $commit_A
git rebase -i $commit_A master
git log --oneline --graph --all --decorate | grep .
git checkout branch
git rebase master
git log --oneline --graph --all --decorate | grep .
gitk --all
答案 1 :(得分:0)
git checkout branch
git rebase --onto master <hash-from-step-1>