blog.hekt.org

Gitのお勉強

よくわからず使うのもなんかなー、ということで理解できていないところを調べて書いておきます。

ブランチ?

正確さが必要な時は、用語 “ブランチ” は開発ラインという意味で使用し、 “ブランチのヘッド” (あるいは単に “ヘッド”) はブランチ上の最新のコミット という意味で使用します。上記例では、”A” というブランチヘッドは、 ある特定コミットの点を指しますが、その点につながる3つのコミットの線は 全て “ブランチ A” を構成する部品です。 しかしながら、混乱が起きないようなときには、ブランチの場合にも ブランチのヘッドの場合にも単に “ブランチ” ということがあります。

ブランチのイメージ

図にするとこういう感じ?

もともとやろうとしていた「大きな変更の前にバックアップ」的な使い方は、新しくブランチを作るのが普通みたいですね。

新しい機能を追加しようとしたときや、大きく書き換えるときにとりあえずブランチをつくっておいてそこで作業する、みたいな感じでしょうか。うまくいけばマスターブランチに併合(マージ)。

一人で開発する場合でも「新しい機能」の開発中に別のタスクが発生するのはよくあることでしょうから(バグが発覚したとか)、マスターブランチのみで作業しているとバグフィックスのコミットと新開発のコミットがごちゃ混ぜになって混乱しそうです。このあたりがブランチ管理のメリットでしょうか。

具体的にGitでやるにはどうするか。

$ git branch testbranch #ブランチ"testbranch"を作成
$ git branch #ブランチの一覧
* master
  testbranch
$ git checkout testbranch #ブランチをtestbranchに切り替え
M	MyScript.py
Switched to branch 'testbranch'
$ git branch
  master
* testbranch

これで切り替わりました。マージするときには

$ git checkout master
Switched to branch 'master'
$ git merge testbranch
Auto-merging MyScript.py
Merge made by recursive.
 MyScript.py |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

こんな感じ。

おまけ

$ git marge testbranch
git: 'marge' is not a git command. See 'git --help'.

Did you mean this?
	merge

親切!

$ git config --global --add help.autocorrect -1

と設定しておくと候補のほうを実行してくれるらしい。