web-dev-qa-db-ja.com

同じGitリポジトリ内の2つのブランチを同期するにはどうすればよいですか?

よくあるワークフローのハードルは次のとおりです。

masterは「安定した」ブランチです

$ git status
# On branch master
nothing to commit (working directory clean)

ブランチにモジュールを作成する

$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo

マスターまたは他のブランチで作業する

今後数週間で、より多くのコードが直接および他のブランチによってマスターするためにコミットされます。 fooブランチは、この期間は変更されません。

fooブランチで作業を再開/更新します

$ git checkout foo

大野! fooは非常に古くなっています! なぜなのか理解していますが、私はdo必要ですfoo同期を取り戻します。

質問

masterブランチから最新のコンテンツを取得するにはどうすればよいですか?

31
maček

周りのブランチが必要ない場合:

Fooをマージしてマスターに戻した場合は、「git branch -d foo」でトピックブランチを強制終了し、「hackout -b foo」で再度ハックする必要があります。

ブランチが必要な場合:

マスターブランチに対してトピックブランチをリベースできます。

git checkout foo
git rebase master

または:

git rebase master foo
33
Adam Vandenberg

リベースとは、一連のコミットを新しいベースコミットに移動または結合するプロセスです。リベースは最も便利で、機能分岐ワークフローのコンテキストで簡単に視覚化できます。一般的なプロセスは、次のように視覚化できます。

Git Rebase visual explanation

以下の例では、git rebaseとgit mergeを組み合わせて、線形のプロジェクト履歴を維持しています。これは、マージを確実に早送りするための迅速かつ簡単な方法です。

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"

機能の真ん中に、プロジェクトにセキュリティホールがあることを認識しています

# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix

ホットフィックスをマスターにマージした後、分岐したプロジェクト履歴があります。単純なgitマージの代わりに、機能ブランチをリベースと統合して、線形履歴を維持します。

git checkout new-feature
git rebase master

これにより、新機能がマスターの先端に移動し、マスターからの標準の早送りマージが可能になります。

git checkout master
git merge new-feature

Atlassian Git Rebase Tutorial から取得

以下を使用して、2つのブランチ(mineとyours)からの変更を組み合わせ、両方のブランチを同期して作業を続けます。これは機能しているようです。誰かがそれで問題を見ていますか?

git checkout mine # make sure I'm on my branch
git commit -a     # commit changes
git Push Origin mine  
git checkout yours # switch to your branch
git pull Origin yours # get changes you've committed & pushed
git checkout mine 
git merge yours # merge your changes into mine
git Push Origin mine 
git checkout yours 
git rebase mine # set your branch to the merged result
git Push Origin yours # Push the merged result up to your branch on Origin
git checkout mine # get back to my branch
1
user74279