別のブランチから変更を取得する方法


99

私は現在featurexブランチに取り組んでいます。私たちのマスターブランチはbranchという名前our-teamです。作業を開始してからfeaturex、ブランチにさらに変更が加えられましたour-teamfeaturexマージをプッシュする前に、すべてが期待どおりに機能することを確認できるように、our-teamブランチからへのすべての変更をローカルで取得したいfeaturexと思います。

からすべての最新の変更を取得するために、これをローカルで実行しましたour-team

git checkout our-team
git pull

どうやってやるの?


9
あなたは非常に慎重かつ正確に質問をしました。これにより、答えが簡単になるだけでなく、初心者(私など)も理解しやすくなります。
douglas.kirschman

回答:


58

たとえば、ブランチにいるときにリベースを使用できgit rebase our-teamますfeaturex

ブランチの終わりにブランチの開始点を移動our-teamし、featurexブランチ内のすべての変更をマージします。


3
将来的にはこれを使用しますが、今回は次のようにしました。同じ効果がありますか?git checkout our-team git pull git checkout featurex git merge our-team
アンソニー

5
強調したいのですが、これを実行our-teamローカルからの変更がない場合は、git fetch && git rebase origin/our-team代わりに実行する必要があります。コマンドは、リポジトリが以前に更新されていることを前提としています。

108
  1. マスターブランチに移動します our-team

    • git checkoutour-チーム
  2. our-teamブランチからすべての新しい変更をプルします

    • git pull
  3. あなたのブランチに行きます featurex

    • git checkout featurex
  4. our-teamブランチの変更をにマージしますfeaturexブランチ

    • gitマージ our-team
    • または、特定のコミットをマージする場合はgitcherry-pick{commit-hash}
  5. our-teamブランチの変更で変更をプッシュする

    • git push

:おそらくour-teamfeaturexブランチをプッシュする前にブランチにマージした後、競合を修正する必要があります


git pullはどこから入りますか?
chiayongkang19年

30
git fetch origin our-team

または

git pull origin our-team

ただし、最初に、更新先のブランチ(featurex)に既にいることを確認する必要があります。


8

あなたはほとんどそこにいます:)

残っているのは

git checkout featurex
git merge our-team

これにより、チームがfeaturexに統合されます。

上記は、featurexでの変更がすでにコミット/隠されていることを前提としています。そうでない場合は、最初にこれを行う必要があります。


6

グーグルでこの投稿に来る他の人々のために。ブランチをマージするか、リベースするかの2つのオプションがあります。どちらも動作は異なりますが、結果は似ています。

受け入れ答えがあるリベース。これは、に行われたすべてのコミットがかかりますour-team し、その後に行わコミットを適用しますfeaturex、必要に応じてそれらをマージするプロンプトを表示します。

リベースの1つの注意点は、ブランチ履歴が失われる/書き換えられることです。基本的に、ブランチはコミット123abcではなくコミット456cdeで開始されたことをgitに伝えます。これブランチで作業している他の人々に問題を引き起こし、いくつかのリモートツールはそれについて不平を言うでしょう。あなたが何をしているのか確信があるなら、それが--force旗の目的です。

どのような他のポスターが示唆されていることであるマージ。これにより、featurexブランチはどのような状態でも取得され、現在の状態とマージしようとしour-teamますour-team。にプッシュする前に、1つ、大きな、マージコミットを実行し、すべてのマージエラーを修正するように求められます。違いは、新しいコミットのfeaturexコミットを適用してからour-team、違いを修正することです。また、履歴を書き換えるのではなく、以前のコミットを書き換えるのではなく、コミットを1つ追加します。

どちらのオプションも有効であり、連携して機能します。機能ブランチに対して通常行われること(つまり、git-flowなどの広範なツールや方法論を使用している場合)は、それをメインブランチにマージし、多くの場合、マージリクエストを実行して、すべての競合を解決します。 1つ(または複数)のマージコミットに発生します。

リベースは興味深いオプションであり、最終的にマージを実行する前にブランチを修正し、1回の大きなマージコミットを実行する手間を軽減するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.