markdown 学习Git分支笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 学习Git分支笔记相关的知识,希望对你有一定的参考价值。

# Learn Git Branching
- https://learngitbranching.js.org/

- 総覧のよいまとめ
    - [私が使うGitコマンドまとめ のまとめ \- what is it, naokirin?](http://naokirin.hatenablog.com/entry/20111209/1322577154)
        - [Gitの基礎知識 コマンド以外に知っておくべきこと \- what is it, naokirin?](http://naokirin.hatenablog.com/entry/20111207/1322576272)
        - [私の使うGitコマンドまとめ 見る編 \- what is it, naokirin?](http://naokirin.hatenablog.com/entry/20111202/1322576420)
        - [私の使うGitコマンドまとめ 歴史操作編 \- what is it, naokirin?](http://naokirin.hatenablog.com/entry/20111204/1322576320)
- `git add` についての良いまとめ
    - [Gitコマンドについて調べる【git add】 \- blog @kimromi](http://kimromi.hatenablog.jp/entry/2015/08/04/082357)
- `git reset` についての良いまとめ
    - [git reset についてもまとめてみる \- murankの日記](http://d.hatena.ne.jp/murank/20110327/1301224770)
- `git show HEAD~` で「現在のブランチの先頭の一つ前のコミット内容が見られる」
- `cherry-pick` は複数の引数をとることができる
    - `git cherry-pick A; git cherry-pick B; git cherry-pick C` は `git cherry-pick A B C` と書くことができる
- `HEAD` を動かす方法は `checkout`
- ポインタを動かす方法は `git branch -f BRANCH_NAME COMMIT_HASH`
- `rebase` は `merge` に似た概念
    - `merge` はブランチを明確に残す
        - 引数にとる値は「併合されるブランチやコミット名」(自分は併合する側である)
    - `rebase` はブランチを残さない((消すわけではなく不可視になる))
- `git rebase` には引数の取り方(省略の仕方)がいくつかある
    - `git rebase ブランチ名` の場合
        - これは `git rebase 併合先のブランチ名 (併合元のブランチ名)`
        - 併合先のブランチに自分のブランチを併合する(併合元が省略されると今いる自分のブランチ名が併合元になる)
    - `git rebase 相手先のブランチ名 併合元のブランチ名`
        - 前項の場合で「併合元のブランチ名」が省略されていなければ、文字通りの併合が行われる
- `git rebase` した後は「併合したブランチの先頭に、併合元ブランチの `HEAD` が来る」
- `checkout` と `branch -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` なので、意図しない結果を招くことがある((と思う))
- `reset` と `revert`
    - 引数はどちらも `HEAD` や `HEAD^` や `HEAD~3`
    - `reset` の引数は、「戻る場所(コミット)が `HEAD` からどこにあるか」を指す
    - `revert` の引数は、「どのコミットを打ち消すかを `HEAD` からの相対位置で」指す((おそらくコミットハッシュを示しても指定可能だと思う))
- 現在 `development` ブランチにいて `git rebase master` を実行した場合
    - `master` ブランチの先頭に `development` ブランチがくっつく
        - `development` ブランチが先行する
    - このとき `master` ブランチは `development` ブランチより遅れている
        - `master` ブランチを追いつかせるためには、カレントのブランチを `master` にしてから以下のコマンドを実行する
        - `git rebase development`
            - これがベストプラクティスなのかは分からない
            - リモートのことは考えてはいけないのでこれでいいとは思う
- `amend`
    - `amend` は `git 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 pull` は `git fetch` + `git merge` のこと
    - `git pull --rebase` は `git 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
```

- `reset` の `HARD` と `SOFT` と `mixed`
- `blame`
- `grep`

#### コントリビューション
https://github.com/pcottle/learnGitBranching

- `src/levels/*/*.js`

以上是关于markdown 学习Git分支笔记的主要内容,如果未能解决你的问题,请参考以下文章

Git学习笔记分支管理

Git学习笔记

Git学习笔记9

git 学习笔记三 (windows环境)

git学习笔记

git学习笔记