あなたが現在の状況にあると想像してください:
- A - B - C - D
\ ^
- X - Y master
^
branch1
実行git checkout branch1; git rebase master
すると、コミットがbranch1から移動され、マスターブランチの上に適用されます。
master
v
- A - B - C - D
\
- X - Y
^
branch1
これはmasterを変更しませんが、2つの方法でbranch1を変更します。
- commitの親を
X
からA
に変更すると、commitのIDが変更されD
ます。X
実際、Gitに関する限り、これはまったく新しいコミットになります(X
新しいIDをY
持っているので、新しい親を持っているのでY
、新しいIDも取得します)。 、など、ブランチにさらにコミットがある場合)。
- 実行する必要のある競合解決は、コミットの内容を変更します。
すでにbranch1をリモートリポジトリにプッシュしている場合は、それをリベースすることは非常に悪い考えです。すでに共有されている履歴を変更すると、問題が発生するだけです。
branch1をプッシュしていないと仮定すると、それをmasterにマージして(を使用してgit checkout master; git merge branch1
)、masterを早送りしてcommitすることができY
ます。これにより、マスターを変更することなく、きちんとした線形履歴が得られます。
- A - B - C - D - X - Y
^
branch1 AND master
すでにbranch1をプッシュしている場合は、リベースを避け、代わりに(を使用してgit checkout master; git merge branch1
)マージを使用する必要があります。これにより、どちらの履歴も変更されませんがM
、マスターブランチに新しいコミット(この図でマーク)が作成されます。
- A - B - C - D - M
\ / ^
- X - Y - - master
^
branch1