vi start.sh
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
echo "2" >> m2.md && git add . && git commit -m 'm2'
git checkout -b develop
echo "1" >> d1.md && git add . && git commit -m 'd1'
echo "2" >> d2.md && git add . && git commit -m 'd2'
git checkout master
echo "3" >> m3.md && git add . && git commit -m 'm3'
sh start.sh
git checkout develop
git rebase master
git checkout master
git merge develop
vi start.sh
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
echo "2" >> m2.md && git add . && git commit -m 'm2'
echo "3" >> m3.md && git add . && git commit -m 'm3'
echo "4" >> m4.md && git add . && git commit -m 'm4'
echo "5" >> m5.md && git add . && git commit -m 'm5'
sh start.sh
git rebase -i HEAD~3
// or
git rebase -i 124519e
vi start.sh
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
echo "2" >> m2.md && git add . && git commit -m 'm2'
echo "3" >> m3.md && git add . && git commit -m 'm3'
git checkout -b develop
echo "1" >> d1.md && git add . && git commit -m 'd1'
git checkout -b feature/issue-1
echo "1" >> f1.md && git add . && git commit -m 'f1'
echo "2" >> f2.md && git add . && git commit -m 'f2'
git checkout develop
echo "2" >> d2.md && git add . && git commit -m 'd2'
echo "3" >> d3.md && git add . && git commit -m 'd3'
echo "4" >> d4.md && git add . && git commit -m 'd4'
sh start.sh
git checkout feature/issue-1
git rebase --onto b93be68 8a42167
git rebase develop
- feature/issue-1 是從 develop �開出的分支
- develop 是從 master 開出的分支
vi start.sh
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
echo "2" >> m2.md && git add . && git commit -m 'm2'
echo "3" >> m3.md && git add . && git commit -m 'm3'
git checkout -b develop
echo "1" >> d1.md && git add . && git commit -m 'd1'
echo "2" >> d2.md && git add . && git commit -m 'd2'
git checkout -b feature/issue-1
echo "1" >> f1.md && git add . && git commit -m 'f1'
echo "2" >> f2.md && git add . && git commit -m 'f2'
git checkout develop
echo "3" >> d3.md && git add . && git commit -m 'd3'
git checkout master
echo "4" >> m4.md && git add . && git commit -m 'm4'
echo "5" >> m5.md && git add . && git commit -m 'm5'
sh start.sh
git checkout develop
git rebase master
git checkout feature/issue-1
git rebase develop
- init 有 1 個
- m 有 3 個
- d 有 4 個
- f 有 2 個
vi start.sh
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
echo "2" >> m2.md && git add . && git commit -m 'm2'
echo "3" >> m3.md && git add . && git commit -m 'm3'
git checkout -b develop
echo "1" >> d1.md && git add . && git commit -m 'd1'
git checkout -b feature/issue-1
echo "1" >> f1.md && git add . && git commit -m 'f1'
echo "2" >> f2.md && git add . && git commit -m 'f2'
git checkout develop
echo "2" >> d2.md && git add . && git commit -m 'd2'
echo "3" >> d3.md && git add . && git commit -m 'd3'
echo "4" >> d4.md && git add . && git commit -m 'd4'
sh start.sh
git rebase --onto 6b193ca bac0cfe
echo "Hello World" >> README.md && git add . && git commit -m 'init'
echo "1" >> m1.md && git add . && git commit -m 'm1'
git checkout -b hotfix/issue-1
# 在文字 1 後面加一個 2
vi m1.md
git add . && git commit -m 'h1'
git checkout master
# 在文字 1 後面加一個 3
vi m1.md
git add . && git commit -m 'm2'
# 切換到 hotfix/issue-1 分支
git checkout hotfix/issue-1
# 將 hotfix/issue-1 內新增的第一筆 commit,接在 master 分支的最後一筆 commit。
git rebase master
# 查看衝突
git status
git diff
# 編修衝突
vi m1.md
�# 再一次確認編修結果
git diff
# 將修改的內容,放入 index 中
git add .
# 告訴 rebase 我解完了
git rebase --continue
不一定解一次,就解掉了,如果 hotfix/issue-1 分支,�跟 master 分支的�送交紀錄差距很遠,可能會連續碰到好幾次衝突,你得一直會到 Step5 的階段,�在解一次新的衝突,直到用 git status
指令�觀察,確定 ���rebase in progress; onto
�不見了。
若如果你在過程中會連續遇到五次衝突,但你在解第四次衝突的時候,忽然想起剛剛解第二次衝突的時候,內容有改錯,這時候你就得用 git rebase --abort
指令,把之前所有修改衝突的狀態都 reject 掉,重新再做一次 git rebase master
。
如果你沒有�照這個正常步驟走完,例如不管 git 的提示,遇到衝突一直按 git rebase --skip
忽略它。最後會導致 git 回報你 �rebase 成功,但實際結果卻是遺失了一堆的 commit 記錄。
例如你明明沒解完,卻用 git add . && git rebase --continue
告訴 git 你解完了,git 並沒有機制防止你犯這樣的錯,最後將會導致,一堆衝突沒解完,當成一般正常內容 commit 進了 repo 中。