2012-01-11 18 views
3

私はリモートブランチをヘッドと「同期」したいので、最終的にマージすると頭痛にはなりません。したがって、私はブランチの変更を私の支店に引き入れて、それがどのように違うのかを見たいと思っています。Git:ブランチの管理

Gitで次のワークフローを達成するにはどうすればよいですか?

  1. チェックアウトリモートブランチ。
  2. 私はそれをチェックアウトし、それから頭を変更します。
  3. ブランチを編集する
  4. ブランチをHEADとよく似ていますが、同じブランチのリモートバージョン(ヘッドに影響を与えずに)に戻してください。

同じことを実現する優れたワークフローに関するヒントは非常に役に立ちます。

# make sure your notion of the remote is up to date 
git fetch origin 
# create and check out a branch, at the same place as the remote master branch 
git checkout -b origin-master origin/master 
# merge your local master 
git merge master 
# test, edit away, hack hack hack 
git add ... 
git commit ... 
# push back to origin 
git push origin origin-master:master 

用語ノート:

答えて

4

これはすべて、かなり基本的なものである

  • 引っ張るとフェッチやマージの組み合わせです。ローカルブランチで作業しているときは、フェッチする必要はないので、マージしています。

  • HEADはあなたが何を意味するのかを意味するものではありません。 (おそらくあなたはcvs/svnの人です。)HEADは単に現在チェックアウトされているコミットです(通常はブランチ名で呼ばれます)。 HEADをマージしていないので、そのブランチをマージしています。私はここでそれをマスターと呼んだ。

同じことをするためのより良いワークフローについてのご質問は...まあ、答えるのはかなり難しいです。あなたの目標はあいまいです。あなたは「ゆっくり」同期して、「最終的にそれをマージする」と言いますが、あなたが概説している手順はそれをすべて一度に行うので、まあ、すべてマージされます。後で行うことは何もありません。あなたが段階的にそれをやりたいのであれば、私が与えた手順を繰り返すだけで、毎回マージする履歴の中間コミットを選ぶことができます。あなたが実際にブランチからリモートのものをマージすることを実際に始めたかったのかもしれません。

git checkout -b master-merging master 
git fetch origin 
git merge origin/master 
# test, hack, commit, push... 
git push origin master-merging:master 

または増分マージと:

git checkout -b master-merging master 
git fetch origin 
git merge origin/master~20 # 20 commits before origin/master 
# test, hack, commit 
git merge origin/master~10 # 10 commits before origin/master 
# test, hack, commit 
git merge origin/master 
# test, hack, commit, push... 
+0

うーん。これは非常に便利ですが、私は "支店"がどこにあるのかわからないのですか?あなたのやっていることはすべてマスターのようですね? – jayunit100

+0

'git checkout -b'行は、上記のコメントで述べたように、ブランチを作成します。原点のマスターブランチを表すことを示すために、「origin-master」という名前を付けました。 – Cascabel

+0

通常、私の枝は "new-gui-experiment"のような名前です。そのような一般的な用語を使用してブランチに名前を付ける理由は何ですか? – jayunit100