私のgitリポジトリには2つのブランチがあります:
capsule-os
* remotes/m/ics
カプセル os は、remotes/m/ics ブランチにローカルで変更を加えたブランチです。私はカプセル os ブランチで作業 (およびビルド) していますが、remotes/m/ics は時々更新され、この変更をローカル ブランチと同期したいと考えています (実際、変更をこのリモート ブランチに追加します)。私は何をすべきか?
私のgitリポジトリには2つのブランチがあります:
capsule-os
* remotes/m/ics
カプセル os は、remotes/m/ics ブランチにローカルで変更を加えたブランチです。私はカプセル os ブランチで作業 (およびビルド) していますが、remotes/m/ics は時々更新され、この変更をローカル ブランチと同期したいと考えています (実際、変更をこのリモート ブランチに追加します)。私は何をすべきか?
アンバーの答えは正しいですが、マージではなくリベースの代替アプローチで答えを追加する価値があると思いました。
ブランチをまだ公開していない場合は、更新されたブランチにcapsule-os
変更を「リベース」することができます。たとえば、次のようにします。m/ics
# Make sure you're on the right branch:
git checkout capsule-os
# "Replay" all of your commits on top of m/ics, and update
# capsule-os to point to the result:
git rebase m/ics
(その場合、いくつかの競合を解決する必要があるかもしれません-それが簡単にできない場合は、capsule-os
ブランチを元の状態に戻すことができますgit rebase --abort
。)
別の方法として、ブランチの新しいバージョンをフェッチして、ics
それにリベースすることもできます。
git pull --rebase m ics
を使用するにはさまざまな方法がありますがgit rebase
、それらはすべて基本的に一連のコミットを取得し、それらのそれぞれについて、コミットによって導入された変更を他のコミットに再適用しようとすることを伴います。これは、一連のコミットを更新されたアップストリーム ブランチに「移動」して、履歴をシンプルに保つためによく使用されます。
これを「ブランチを公開していない場合」と限定した理由は、capsule-os
ブランチの履歴を書き換えると、そのブランチの元のバージョンに取り組んでいる共同作業者にとって困難になる可能性があるためです。ただし、それがまだ個人的な作業である場合、リベースは、ブランチをアップストリームに合わせて最新の状態に保ち、履歴をシンプルに保つための優れた方法です。