3

master、task_one、task_twoの3つのブランチがあります。他の人が行ったすべての更新をプルして、これらの更新をすべての作業に適用したいと思います。

正しいコマンドは何ですか?

4

2 に答える 2

3

マージの競合が発生する可能性があるため、「すべてを自動的に更新する」という良い方法はありません。これは、単に「常に最新の状態にする」ための良い方法がないことを意味するため、次の質問は、なぜ更新が必要なのかということです。

コードレビューのためにそれらが必要な場合は、

git remote update

に続く

git log refs/remotes/<remote-name>/<branch-name>

他の人が送信したコミットを調べることができます。

それらを自分が行った変更と統合したい場合(リベースについて言及します)、ブランチで実際に作業を行う前に変更を取得するだけで済みます。したがって、作業したいブランチをチェックアウトしたら(そして、現時点で変更を統合する準備ができていると仮定して、理由もなく統合しないでください!準備ができたら統合してください!

git pull --rebase <remote-name> <remote-branch-name>

<remote-name>から<branch-name>をフェッチし、それに対してリベースします。これは実際には、以下を実行するためのショートカットです(そしてそれと同じです)。

git fetch <remote-name> <remote-branch-name> &&
git rebase <remote-branch-name>

また、特定のブランチにデフォルトのアップストリームリモート/ブランチを設定することもできます。これにより、次のように入力するだけで済みます。

git pull --rebase

将来。これは、実行時間の長いトピックに役立ちます。デフォルトを設定するには、次を使用します。

git branch --set-upstream <local-branch-name> <remote-name>/<remote-branch-name>

要約すると、それは次のとおりです。

  • gitcheckout<ブランチ>
  • git pull --rebase <remote-name> <remote-branch-name>

更新するブランチごとに、実際に作業を行う準備ができるまで、すべてのブランチを単純に通過することはお勧めしません。

「master」が積極的に開発されている場合、「remote-master」は積極的に開発されています(そしてリベースする必要があります)が、「task_one」と「task_two」は「remote-master」に直接基づいているのではなく、「master」に基づいています"、タスクブランチではなく、" master "から--rebaseをプルするだけで、代わりにマスターの上にリベースするのが理にかなっているかもしれません。例えば:

  • gitチェックアウトマスター
  • git pull --rebase <remote> master
  • git checkout <task-branch>
  • gitリベースマスター

実際には、git pull --rebase <remote> masterを、ときどきgit rebase masterと混合すると、履歴の複雑さによっては、「正しいことを行う」ことができます。それに依存しないでください、しかし可能性に注意してください。「gitpatch-id」と「gitrebase」がどのように相互作用するか、および「git rebase」がマージでどのように機能するかを理解してから、ワークフローをその単純化に基づいてください。ただし、ワークフローによっては、いくつかの手順を節約できます。

于 2012-09-12T20:52:38.573 に答える
1

masterから新しいローカルブランチ「merge_work」を作成します。git checkout -b merge_work

次に、task_oneをマージします。git merge task_one

次に、競合を修正してから、 task_twoをマージしgit merge task_twoて競合を再度修正します。

それがすべて完了したら、マスターに移動しますgit checkout master

マージmerge_work:git merge merge_work

注:これは、すべてのブランチがすでにローカルであることを前提としています。

于 2012-09-12T20:31:42.073 に答える