SVNからGitに乗り換えたときに、知らない用語がたくさん出てくる。
そんな用語をここで、まとめておく。
■clone (クローン)
クローンとは、SVNでのチェックアウトとほぼ同じ意味。
簡単に言えば、リポジトリから、ローカルにファイルを落としてくること。
ちなみに、Gitでのチェックアウトは、SVNの意味と違うので注意が必要。
Gitでのチェックアウトとは、作業ブランチを切り替える(決定する)意味。
devブランチからmasterブランチに切り替えるとき、masterブランチをチェックアウトするという。
■push (プッシュ)
リモートのリポジトリへ反映すること。
Gitでは、ローカルにリポジトリをもつので、コミットとはローカルのリポジトリに反映することとなり、その状態では、サーバーに反映されていない。
プッシュして、はじめてリモートに反映されることとなる。
ここがSVNとの大きな違いといえる。
■pull (プル)
プル=コミット+プッシュの反対。
プル=フェッチ+マージ
サーバリポジトリからローカルリポジトリにデータを取得し(これをフェッチという)、さらに作業ブランチへも反映する。(これをマージという)
[注]プルは使うなという人もいるように、実は奥が深いのがこのコマンド。
リスク回避のためには、フェッチしてマージするほうがベターのよう。
■fetch (フェッチ)
プルでおこなわれるうちの最初のほう。
サーバリポジトリからローカルリポジトリにデータを取得するまでをフェッチという。
■merge (マージ)
プルでおこなわれるうちの後のほう。
ローカルリポジトリから作業ブランチへ反映するまでをマージという。
コンフリクトが発生する場合もあるので、手動マージをおこなうなどで対処する。
■HEAD
対象のブランチの先頭のこと。
つまり、最新コミットのこと。
HEADと一言で言っても、どのブランチのHEADなのかを意識しないと危険。
(ブランチがリモートなのかローカルなのかmasterなのかdevなのかなど。)
■origin
リモートをあらわす意味で使われることが多い。
■fast forward
ブランチ元のブランチへマージしようとしたとき、ブランチ元で新たなコミットがないため、コンフリクトなしにそのままマージできること。
細かい話でいうと、HEADの書き換えだけでマージができてしまう状態のこと。
ex.
masterブランチからdevブランチを作成したあと、devブランチでコミットを1回した。
masterでは、コミットされていない。
この状態で、devブランチをmasterブランチにマージしたとき、コンフリクトなしでマージできるので、これをfast forwardという。
■non fast forward
ブランチ元のブランチへマージしようとしたとき、ブランチ元で新たなコミットがあるとき、non fast forwardという。
要は、コンフリクト(競合)しているということ。
そのまま、マージせず、手動マージするなどの対応をするのが普通。
■rebase (リベース)
一度分岐したブランチをマージするときに、分岐した歴史を消すこと
そのブランチでのコミットがあたかも、マスター上(マージ後ブランチ)でコミットされたようになる。
リベース後は、2つの枝だった状態がマスタ(マージ後ブランチ)だけの1つの枝になる。
■cherry-pick (チェリーピック)
あるブランチ上の特定のコミットだけをマスター(他のブランチ)に反映するコマンド。
リベースがブランチ上のすべてのコミットを対象にするのに対し、こちらは特定のコミットだけを対象とする。
■stash (スタッシュ)
作業の途中で、他のブランチに切り替えるときに、作業状態を記憶しておくこと。
stashにプッシュするとかいう。
Gitの場合、これをせずに、ブランチを切り替えると、コミットしていないものとかは消えてしまうので注意が必要。
再び、もとのブランチに戻ってきたときに、プッシュしたものをポップすると元の作業状態に戻すことができる。
保存したブランチと違うブランチでポップする(元に戻す)と、ブランチ違いでも適用されてしまうので注意が必要。
複数stashできて、呼び戻すときも対象のものを選ぶことができる。
stash saveするときに、メッセージもつけれる。
EGitでは、チームメニューおよびGitRepogitoriesパースペクティブでできるよう
stash changeメニューやStashリストから適用、削除を実行する感じ
http://wiki.eclipse.org/EGit/New_and_Noteworthy/2.0
0 件のコメント:
コメントを投稿