簡體   English   中英

使 git pull --rebase 保留合並提交

[英]Make git pull --rebase preserve merge commits

git pull --rebase刪除未推送的合並提交。 有沒有辦法讓它保存它們?

說我的歷史看起來像——

A
| \ 
B  H
|  |
C  G
|  |
D  F
| /
E

A是合並提交。)

git pull --rebasegit 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

自那以后:

所以:

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.rebasepreserve ”添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM