6

開発ブランチがあり、origin /masterが更新されました。実行するgit pullと、リモートの変更を確認できます。しかし、私のローカルマスターは、以前に行ったときに残した場所に残っていgit checkout develます。オリジン/マスターの変更を開発ブランチにマージしたい。このようなブランチはリモートにも存在します。

大規模なシステムを再構築することになるので、マスターブランチをチェックアウトしたくありません。ローカルマスターを別のブランチからオリジン/マスターに移動できますか?それから私は開発からを行う​​ことができmergeます。それとも、オリジン/マスターだけが直接開発する方が簡単ですか?後でトラブルになるようですね。merge

編集:この問題を回避する別の方法は、同じリポジトリで異なるワークスペースを使用することです。
参照:git new workdir - masterdevelの両方を同時にチェックアウトすることができますが、同じ.gitリポジトリを使用します。

4

2 に答える 2

12

masterローカルを更新origin/masterしてからマージすることと、直接マージすることの唯一の違いは、マージ時origin/masterに事前に生成されたコミットメッセージです(最終的に更新すると仮定しますmaster)。だから私はちょうどマージすると言いorigin/masterます。


とはいえ、「チェックアウトされていないローカルブランチをそのトラッキングブランチと一致するように更新するにはどうすればよいですか」という質問に答えるには、次のように言うことができます。

git push . origin/master:master

これはgit push機械を使用しますが、のリポジトリ.は「現在のリポジトリ」を意味します。ソースブランチはとして指定されorigin/master、リモートブランチはとして指定されるmasterため、これmasterはに一致するように更新されますorigin/master。配管コマンドでも同じことができますがgit update-ref、使用するgit push方が簡単で少し安全です(デフォルトでは早送り以外のマージが防止され、チェックアウトされたブランチへのプッシュも防止されると思います)。

于 2013-03-01T22:21:47.247 に答える
2

デフォルトでgit pullは、リモートブランチからフェッチし、現在のブランチにマージします。コマンドでブランチを指定しない場合git pull、Gitはブランチに指定されたブランチ(通常はリモートトラッキングブランチ)を使用します。

したがって、develブランチで実行するgit pullと、リモートからdevelブランチがフェッチされ、そこから変更がマージされますが、マスターからはマージされません。

git fetch実行するだけで、リモートのすべてのリモートブランチが更新されることに注意してください。したがってorigin/master、フェッチ後に更新され、を使用して現在のブランチにマージできるようになりますgit merge origin/master

明らかに、これはローカルマスターを更新しないので、開発ブランチをマージする前に、後で更新することもできます。

于 2013-03-01T22:22:22.520 に答える