2013-02-27 19 views
7

特定のブランチでどのようにコミットするかを明確にしたいだけです。Gitを使って変更をコミットしてプッシュする方法

私が "Metro"というブランチに取り組んでいるとします。いくつかのファイルをいくつか変更しますが、これらをリモートリポジトリにプッシュする準備ができていません。

私ができるだけ早く修正する必要があるというホットフィックスが発生します。私は "Master"と呼ばれるきれいなブランチに切り替える必要がありますが、変更したファイルを上書きすることはできません。私はスイッチする前にこれらをコミットする必要があります。

「メトロ」ブランチでこれらの変更をコミットすると、「メトロ」の変更がリモートの「マスター」レポにプッシュされることになります私は別の支店に進んでいますが、それらを託しましたか?

簡潔にするために、コミットはブランチに分かれているか、リモートリポジトリにプッシュするとすべてのコミットが追加されるのですか?

答えて

3

git checkout masterでブランチをマスターに切り替える前に、最初にgit commit -m 'some message'にする必要があります。そうしないと、gitは現在のブランチの変更をマスターブランチに移そうとします。私はそれらを犯したので、私は 別のブランチにプッシュしていていても

は「メトロ」で行われた変更は、 レポ遠隔「マスター」にプッシュされますか?

絶対にありません。 gitはコミットされた変更をMetroからマスターにマージします。これは設計によるものです(注:リモコンを使用しているので、リモコンを使用して実際にプッシュを設定して "デフォルト"で行うことができますので注意してください。)。

1

Gitでブランチがどのように機能するかを理解するには、コミットツリーを常に念頭に置くように考え方を変えることが重要だと思います。各コミットには多数の親コミットがあり、それ以外は何もしないコミットの非循環ツリーがあります。ブランチは、そのツリー内の特定のコミットへの単なるポインタになりました。ブランチに対して新しいコミットを行う場合、実際には、以前のバージョンを親として持つ変更を含む新しいコミットオブジェクトを作成し、ブランチポインタがツリー全体に追加された新しいコミットに移動するだけです。

したがって、ブランチは互いに完全に独立しており、同じようにブランチは実際にはあまり意味がありません。彼らは単なるポインタです。

metroからmasterに切り替えると、(おそらく)ツリーの別の側で操作していることになります。現在作成しているすべてのコミットは、現在のブランチ・ポインタ - マスターのみを移動しますが、他のブランチには影響しません。

あなたがブランチをプッシュすると、ブランチがポイントしているコミットをリモートに伝えてから、リモートにツリーを完成させるのに必要なすべてのオブジェクトを渡すだけです。

2

それを簡潔にするために、枝に分離コミットしている、またはリモートレポにプッシュするとき、すべての コミットが追加されますか?

簡潔にする:最初の部分にははい:-)。

技術的に言えば、gitのブランチは、コミットの連鎖であり、名前とともにあります。ブランチをプッシュすると、そのブランチに属しているすべてのコミットがプッシュされます(ただし、リモートレポにはコミットはありません)。だから、gitは何とかすべてのコミットをプッシュしません。

ただし、プッシュしたいブランチを押してください。git pushは、すべてブランチをプッシュするように設定できます。

git config push.default current 

これはgit pushのみ(デフォルトにするために使用していないすべての分岐、)現在のブランチをプッシュすることを確認します。これを回避するには、設定するvar push.defaultを設定します。

関連する問題