web-dev-qa-db-ja.com

現在のブランチに引き込む方法は?

私の現在のブランチがmyfeatureだとしましょう。マスターを最新の状態にしたいと思います。両方とも git mergegit pull私が知る限り、常に現在のブランチにマージします。

リモートブランチ(例:オリジン/マスター)から現在行っていないブランチ(マスター)に変更をマージする方法はありますか?私は1つの方法を考えることができます:

git stash
git checkout master
git pull Origin/master
git checkout myfeature
git stash apply

より良いものはありますか?

(おそらく私の質問全体が間違っている可能性があります:だろうgit fetchリモートトラッキングが有効になっている場合、オリジン/マスターに一致するようにマスターを自動的に更新しますか?)

43
Steve Bennett

プル/マージは現在のブランチにのみマージされるというのは正しいです。

ただし、フェッチは引き続き使用できます。たとえば(以下の名前は無実を保護するために変更されましたが、ハッシュは本物です):

_$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH Origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56  OTHER_BRANCH -> Origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH Origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62
_

この場合、fetchは一連のOrigin /ブランチを更新しました。ローカルブランチはどれも更新されませんでしたが(_git rev-parse_の出力は同じままです)、新しいコミットはリポジトリにあり、表示できます(_git log Origin/OTHER_BRANCH_、_gitk --all_など)。

ニーズによっては、これで十分な場合があります。特に、現在のブランチを離れることなく、_Origin/master_からmasterに何を適用する必要があるかを確認できます。

1
torek
git fetch -u Origin master:master

チェックアウトを使用せずにGitブランチをマージ、更新、プルする

git fetch -u <remote> <remoteBranch>:<localBranch>

-uは、コマンドが引き続き機能することを保証します 指定されたブランチがチェックアウトされている場合でも

38
pkamb

作業中のさまざまなリポジトリ間で変化する個々のブランチをフェッチするのではなく、githubのhub syncヘルパーを使用してこのプロセスを自動化し始めました。

ハブはコマンドラインgitの拡張機能であり、ターミナルを離れることなく日常のGitHubタスクを実行するのに役立ちます。 https://hub.github.com/

$ hub sync
  • ローカルブランチが古くなっている場合は、早送りします。
  • ローカルブランチにプッシュされていない作業が含まれている場合は、それについて警告します。
  • ブランチがマージされたように見え、そのアップストリームブランチが削除された場合は、それを削除します。
1
pkamb