![](/img/trans.png)
[英]How to preserve merge commits automatically while using git pull --rebase?
[英]Make git pull --rebase preserve merge commits
git pull --rebase
刪除未推送的合並提交。 有沒有辦法讓它保存它們?
說我的歷史看起來像——
A
| \
B H
| |
C G
| |
D F
| /
E
( A
是合並提交。)
在git pull --rebase
它git pull --rebase
了——
H
|
G
|
F
|
X
|
B
|
C
|
D
|
E
( X
是新提交git pull --rebase
插入到我的歷史記錄中。)— A
被刪除。
我知道你可以使用git rebase --preserve-merges
與保護它們git rebase
,但我不明白的方式與保留它們git pull --rebase
。
更新:正如我在“ Git 的“ rebase --preserve-merges
”究竟做了什么(以及為什么?) “中介紹的那樣,自 Git 2.18(2018 年第二季度)以來,您更喜歡新選項--rebase-merges
舊選項--preserve-merge
自那以后:
--preserve-merge
,並且所以:
git rebase --interactive --rebase-merges origin/master
# or
git config pull.rebase merges
git rebase --interactive origin/master (would use rebase-merges)
原始答案 2013 年:
或者(對於即將發布的 git 1.8.5 Q4 2013 ,現在在 git 1.8.5, 2013-11-27 中交付):
“
git pull --rebase
”總是選擇做沼澤標准的扁平化變基。
您可以通過將“pull.rebase
”配置設置為“preserve
”來告訴它運行“rebase --preserve-merges
pull.rebase
”。
所以一個簡單的配置就足以確保你的pull --rebase
確實保留了合並:
git config pull.rebase preserve
有關更多信息,請參閱提交 66713ef3 (感謝Stephen Haberman ):
如果用戶在 master 上工作,並且已經合並到他們的 feature 分支,但現在必須“
git pull
”因為 master 移動了,使用pull.rebase
他們的 feature 分支將被扁平化為 master。這是因為“
git pull
”當前不知道 rebase 的保留合並標志,這將避免這種行為,因為它只會將功能分支的合並提交重播到新主節點上,而不是重播功能中的每個單獨提交分支。添加一個
--rebase=preserve
選項,該選項會將--preserve-merges
--rebase=preserve
傳遞給 rebase。
pull.rebase
“preserve
”添加到pull.rebase
配置設置的允許值中。
你可以將你的pull
分成一次fetch
和一次rebase
git fetch origin master
git rebase origin master --preserve-merges
簡單地:
git pull --rebase=preserve
從文檔:
當設置為保留時,使用傳遞給
git rebase
的--preserve-merges
選項進行git rebase
以便本地創建的合並提交不會被展平。
從git v2.22.0 開始, --preserve-merges
merges選項已被棄用,取而代之的是--rebase-merges
(與--interactive
option結合使用)以使用git-rebase
在另一個基本提示之上重新應用提交:
git fetch origin master
git rebase --interactive --rebase-merges origin/master
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.