1
組合讓我們假設,我們有這樣的提交歷史:混帳:調整基線以上的提交
A---B---C (master)
\
D---E (branch)
我們要壁球提交B和C到B/C它們的組合,然後我們我們希望獲得類似如下的結果:
A---(B/C) (master)
\
D---E (branch)
是否有可能獲得? 你能幫我推薦一種方法嗎?
組合讓我們假設,我們有這樣的提交歷史:混帳:調整基線以上的提交
A---B---C (master)
\
D---E (branch)
我們要壁球提交B和C到B/C它們的組合,然後我們我們希望獲得類似如下的結果:
A---(B/C) (master)
\
D---E (branch)
是否有可能獲得? 你能幫我推薦一種方法嗎?
你需要做到以下幾點:
git checkout master
git rebase -i commit_A master
在哪裏commit_A '是散列的承諾A.
在互動環節中,選擇squash
的承諾C.
它將創建以下結構:
* 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
git checkout branch
git rebase --onto master <hash-from-step-1>
非常感謝!它的工作原理:) 有一件事可能會有助於他人。 在今天的一些實驗中,我發現在「C」的變化還沒有被提交的情況下,可以執行一個提交以修改「B」以獲得被修改的「B/C」:這產生與第一個sqaush後指出的結構相同。 然後,如你所建議的那樣,下一步就是重新設定主分支。 –