53

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

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

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

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

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

4

3 に答える 3

65
git fetch -u origin master:master

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

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

またはは、指定されたブランチがチェックアウトされている場合でも-uコマンド--update-head-okが機能することを保証します。そうでない場合は、エラーが発生します。

致命的:非ベアリポジトリの現在のブランチrefs / heads/masterへのフェッチを拒否します

于 2017-08-10T20:24:57.230 に答える
5

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

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

$ 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一連のオリジン/ブランチを更新しました。ローカルブランチはどれも更新されませんでしたが(git rev-parseそれらの出力は同じままです)、新しいコミットはリポジトリにあり、表示できます(、、git log origin/OTHER_BRANCHなどgitk --all)。

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

于 2012-03-17T06:47:41.550 に答える
3

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

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

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

hub sync安全に実行すると、すべてのローカルブランチがリモートのバージョンに更新されます。

于 2019-05-16T20:58:00.047 に答える