corselia
1/6/2018 - 9:00 AM

Learn Git Branching Note

Learn Git Branching Note

Learn Git Branching

  • https://learngitbranching.js.org/

  • 総覧のよいまとめ

  • git add についての良いまとめ

  • git reset についての良いまとめ

  • git show HEAD~ で「現在のブランチの先頭の一つ前のコミット内容が見られる」

  • cherry-pick は複数の引数をとることができる

    • git cherry-pick A; git cherry-pick B; git cherry-pick Cgit cherry-pick A B C と書くことができる
  • HEAD を動かす方法は checkout

  • ポインタを動かす方法は git branch -f BRANCH_NAME COMMIT_HASH

  • rebasemerge に似た概念

    • merge はブランチを明確に残す
      • 引数にとる値は「併合されるブランチやコミット名」(自分は併合する側である)
    • rebase はブランチを残さない((消すわけではなく不可視になる))
  • git rebase には引数の取り方(省略の仕方)がいくつかある

    • git rebase ブランチ名 の場合
      • これは git rebase 併合先のブランチ名 (併合元のブランチ名)
      • 併合先のブランチに自分のブランチを併合する(併合元が省略されると今いる自分のブランチ名が併合元になる)
    • git rebase 相手先のブランチ名 併合元のブランチ名
      • 前項の場合で「併合元のブランチ名」が省略されていなければ、文字通りの併合が行われる
  • git rebase した後は「併合したブランチの先頭に、併合元ブランチの HEAD が来る」

  • checkoutbranch -f

    • HEAD の移動は checkout
      • 相対リファレンス
        • HEAD^2
          • ^ の場合で後ろに数字が付く場合は「マージコミットからどの親を選択するかを指定」する
          • ^ の後ろの数字は「親の生成順」になり、例えば HEAD^1 の場合は最初の親になる
        • HEAD~3
          • ~ の後ろの数字が省略された場合は ~1 と同義
        • ^~ は連結が可能
          • 例: HEAD~^3~2
    • ブランチの先頭の移動は branch -f master commit_hash が一つの方法
      • git branch -f master HEAD~3
        • branch コマンドであることに注意する
    • ブランチの先頭の移動は git rebase 移動先のブランチ名 が一つの方法
      • git rebase development
        • ただしこれだと、先頭のコミットにしか移動できない
        • コマンドとしては rebase なので、意図しない結果を招くことがある((と思う))
  • resetrevert

    • 引数はどちらも HEADHEAD^HEAD~3
    • reset の引数は、「戻る場所(コミット)が HEAD からどこにあるか」を指す
    • revert の引数は、「どのコミットを打ち消すかを HEAD からの相対位置で」指す((おそらくコミットハッシュを示しても指定可能だと思う))
  • 現在 development ブランチにいて git rebase master を実行した場合

    • master ブランチの先頭に development ブランチがくっつく
      • development ブランチが先行する
    • このとき master ブランチは development ブランチより遅れている
      • master ブランチを追いつかせるためには、カレントのブランチを master にしてから以下のコマンドを実行する
      • git rebase development
        • これがベストプラクティスなのかは分からない
        • リモートのことは考えてはいけないのでこれでいいとは思う
  • amend

    • amendgit commit のオプションであり、git commit --amend のように用いる
      • 実行した結果、直前のコミットの内容を上書き(修正)する
        • revert のように新しいコミットが生産されるということはない
    • 「直前のコミットに、現在の変更内容を併合させる」
    • 単に git commit --amend と実行するとエディタが開いてコミットメッセージを含め、直前のコミット内容を変更する
    • --no-edit オプションをつけることでエディタが開かなくなり、コミットメッセージはそのままで、変更内容が併合される
  • tag

    • git tag タグ名称 コミット名
      • コミット名が省略されたときは HEAD が対象になる
    • タグ名称 を使って checkout することができる
  • describe

    • tag の親戚
    • git describe ブランチ名 として実行する
      • 「そのブランチ名の先頭から見て、タグがついている直近のコミットが基準となり、以下の書式で返り値が得られる」
        • <タグ>_<コミット数>_g<ハッシュ>
          • 例: ver1_3_gfoobar
          • 上記の例は、指定したブランチにおいて、そのブランチの先頭から見た直近のタグ付きコミットのタグが ver1 という名称で、そのコミットから見て先頭のコミットは 3コミット 進んでいて、先頭のコミットのハッシュは foobar であるということ
    • git bisect というコマンドもあるらしい((初めて聞いた))
  • git branch コマンドでブランチを作成する際に、第二引数の値でそのブランチのポインタを指定できる

    • 例: git branch bugWork master^^2^
      • bugWork というブランチを作る
      • bugWork ブランチのポインタは、「master ブランチの HEAD の1つ前のコミット→2つ目の親コミット→1つ前のコミット」になる
    • cf. -f オプションは?
      • 既存のブランチのポインタを移動するためのオプション
  • git fetch はすべてのブランチを fetch する

    • 手元に持ってきているが、反映されていない状態
  • git pull

    • git pullgit fetch + git merge のこと
    • git pull --rebasegit fetch + git rebase のこと

追跡ブランチ

git checkout -b totallyNotMaster o/master
これはtotallyNotMasterという名前のブランチを新しく作り、o/masterへの追跡プロパティを設定します。

- 二番目の方法

ブランチのリモートトラッキングを設定するもう一つの方法は、単にgit branch -uオプションを使うというものです。例えば以下のようにです
git branch -u o/master foo

これは、fooブランチをo/masterを追跡するように設定します。もし、fooが現在チェックアウトしているブランチだった場合、以下のように省略することができます:
git branch -u o/master
  • resetHARDSOFTmixed
  • blame
  • grep

コントリビューション

https://github.com/pcottle/learnGitBranching

  • src/levels/*/*.js