kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

GitHub実践入門 (1)

GitやGitHubはちょこちょこ使ってみたことはあるけど
gitはcommitとbranchとpushくらいしかしてないし
GitHubに至ってはリポジトリを作っただけなのでもうちょっと勉強する 

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

 

 一度読んでるので、ざっと流しつつ手を動かすところで手を動かす感じで

第3章 GitHubを利用するための準備

アカウントを作ったらあとはちょっとやってみるだけ

とりあえずREADME.mdに1行追加したんだけど
GitHub Flavored Markdownって改行が改行になるんじゃなかったっけ?

第4章 Gitを操作しながら学ぶ

オプションとか細かいところ含めるとけっこう知らないなあ
あとでAnkiに入れるつもりでメモ

  • git log --pretty=short → コミットメッセージの1行目だけを表示する
  • git log -p → ファイルの差分を表示する
  • git diff → ワークツリーとステージ領域の差分を確認する
  • git diff HEAD → ワークツリーと最新コミットの差分を確認する
  • git branch → ブランチの表示 *が現在のブランチ
  • git checkout -b ブランチ名 → ブランチを作成し、切り替える
  • git checkout ブランチ名 → ブランチを切り替える
  • git checkout - → ひとつ前のブランチに切り替える
  • git merge --no-ff ブランチ名 → ファストフォワードしないでマージする

--no-ffってなんだっけと思って検索してみたところ
マージの履歴を確実に残すため、mergeには--no-ffを指定しておくのがおすすめらしい
設定に入れておく
pullでは逆に--no-ffしないようにする

git config --global --add merge.ff false
git config --global --add pull.ff only

詳細はgitのmerge --no-ff のススメを参照

そもそもfast forwardってなにやってるのかわかってなかった

3.2 Git のブランチ機能 - ブランチとマージの基本」から

あるコミットに対してコミット履歴上で直接到達できる別のコミットをマージしようとした場合、Git は単にポインタを前に進めるだけで済ませます。 マージ対象が分岐しているわけではないからです。 この処理のことを “fast-forward” と言います。

ふむ
マージコミットができないことはわかった
そういえばそうなってたかな

  • git log --graph → グラフィカルに表示

この表示がgitぽいよね
あとgit log --onelineも組み合わせて使いたい

  • git reset --hard ハッシュ → 指定したハッシュの状態を復元
  • git reflog → 過去のコミット履歴を参照

このへん、けっこうヘビーなコマンドなんじゃない?
初心者にさっそくこの辺を教えたくなるところがgitの宿命ってやつ?

[git-tutorial][fix-B]$ git checkout master
Switched to branch 'master'
[git-tutorial][master]$ git reset --hard 2ae35da
HEAD is now at 2ae35da Merge branch 'featureA'

これで状態が戻ったらしいけどfix-Bはいないよね?

[git-tutorial][master]$ git log --oneline --graph
*   2ae35da (HEAD -> master) Merge branch 'featureA'
|\  
| * c1c8639 (featureA) Add feature -A
|/  
* f99a99a Changed README Title
* f6174ce Wrote README.md
* 1b4a9bf First commit

うんいない

[git-tutorial][master]$ git merge --no-ff fix-B 
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

見えないだけでfix-Bはいるってことか

[git-tutorial][master *+|MERGING]$ git add .
[git-tutorial][master +|MERGING]$ git commit -m "Fix Conflict"
[master e891c02] Fix Conflict
[git-tutorial][master]$ git log --oneline --graph
*   e891c02 (HEAD -> master) Fix Conflict
|\  
| * 10e57c2 (fix-B) Fix B
* |   2ae35da Merge branch 'featureA'
|\ \  
| |/  
|/|   
| * c1c8639 (featureA) Add feature -A
|/  
* f99a99a Changed README Title
* f6174ce Wrote README.md
* 1b4a9bf First commit

おおできた
なんかgit使いとして階段をひとつあがったのではないか