by shigemk2

当面は技術的なことしか書かない

Qiita で人気の Git & GitHub ノウハウ #githubkaigi

@yuku_t

  • Qiitaに載ってた
  • GitHub Cheet Sheet
  • 入門Git

コンフリクト発生時の問題

もとの状態がよくわからなくなるとき

  • merge.conflictstyle もとの祖先を表示さす
  • git stash save pop indexしたものがstashされる --all --inclide-untracked --keep-index(index treeをそのまま残す)

全く新しいworking directoryがほしい

git-new-workdir

シンボリックリンクを貼ってくれるところがgit cloneと違うところ。 編集もstashも同期される。

diff-highlight

git-core/contrib

git diff & apply

$ git diff -w | git apply --cached

w

空白文字

cached

indexのみ更新

空白の変更とちゃんとした変更が近すぎるとコンフリクト

git fsck

個々のノードはsha1値を持つ。

使うコミットには名前(ref)をつけて、 名前がつけられていないやつはゴミ。ゴミを判定して列挙する。

$ git prune
$ git gc

addしてcommitせずにreset --hardしちゃった

mergeしてコンフリクトしたときとかたまにやる。

ゴミ判定されたオブジェクト

.git/lost-found/commit/
.git/lost-found/other/ ←こっち

書きだされたファイルをgrepして目当てのファイルを復元

git stash clear

git stash し続けるとゴミが増えちゃうね

git stash apply <stash-sha1>

github review

hubコマンド

hub browse

hub pull-request

現在のリポジトリをブラウザで開く。

空のPRを作って作業を可視化する

$ git checkout -b projectx
$ git commit --allow-empty -m ProjextX
$ git push
$ hub pull-request

git rebase -i --autosquash

push -fを禁じるとどうでもいいコミットログがジャカジャカ増える

"squash! コメント"
rebase.autosquash true

autosquash用のメッセージを自動生成してくれる

$ git commit --squash <comit>
$ git commit --fixup <comit>

fixupはコミットメッセージを編集しない squashは編集する

ブランチ名を調べるのが面倒

prfetch

alias.branch-root

[alias]
  branch-root = merge-base master HEAD

トピックブランチの根本のsha1が見れる

tig ---reverse $(git branch-root)..HEAD