必要に応じて追記していきます。追加の依頼は大歓迎です。
.gitフォルダを取得
トップだと相対フォルダで帰ってきて、別のフォルダだと絶対パスで返ってくるっぽい。
$ git rev-parse --git-dir
/Users/myname/work/repository/.git
ワークフォルダのトップのディレクトリを表示
$ git rev-parse --show-toplevel
/Users/myname/work/repository
現在いるブランチ名を取得
$ git symbolic-ref --short HEAD
master
$ git symbolic-ref HEAD
refs/heads/master
リモートの確認
大抵はoriginだけだろうから問題はないだろうけど、僕はpull requestを送る時用に別のものを(prという名前で)設定することがあったりするので、その全部を列挙してみたいことも。
$ git remote
origin
pr
-v
を付けると、より詳細に出るけど、fetchとpushで別に設定できたりするのかな・・・
$ git remote -v
origin git@github.com:WebAssembly/binaryen.git (fetch)
origin git@github.com:WebAssembly/binaryen.git (push)
pr git@github.com:shibukawa/binaryen.git (fetch)
pr git@github.com:shibukawa/binaryen.git (push)
現在のブランチのremote名を確認する
$ git config --get branch.master.remote
origin
URLだけ取り出したいときはこれ。originのところにgit remoteで取ってきた名前を入れればよい。
$ git config --get remote.origin.url git@github.com:WebAssembly/binaryen.git
コンフリクト
コンフリクトした特定のファイルの変更履歴を見る
-
--merge
を付けると、ancestor以降のログが出るっぽい。 -
--graph
を付けると、つながりがある所は線が表示される。下記の図はリモート側で2回連続コミットしている。 -
--boundary
を付けると、共通祖先も表示。付けないと、それより後のみ。
$ git log --merge --graph --boundary test.png
* commit 2ed1557d6014eef1aaaa9b5993d20c9d4ba1bf12
| Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
| Date: Thu Jul 21 16:10:41 2016 +0900
|
| fix again
|
* commit 7269cd9582347ef06980cfb76e0f42c730fdb994
| Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
| Date: Tue Jul 12 12:31:41 2016 +0900
|
| edit in other repository
|
| * commit 3ab69796745c72b89eec17f9e945fb7427cd8c4c
|/ Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
| Date: Tue Jul 12 12:32:30 2016 +0900
|
| edit at original repository
|
o commit a5fbd6df978a45ca1ef92c41de4b0012c03d672e
Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
Date: Thu Jun 23 14:34:40 2016 +0900
Common parent
1は共通祖先、2は自分、3はマージしたいブランチ上のblobのハッシュを表示
$ git ls-files -u test.png
100755 bc65a2570121339bd646e084e86f2a3757253963 1 test.png
100755 bcde1857845783dddc4886675b2fb8522a055d05 2 test.png
100755 371535216e97ce39407b441f149d6014114c19a7 3 test.png
上記の数値を使って特定のステージのファイルを書き出すことも可能
$ git show :2:test.png > test.ours.png
マージしたいファイルの最終更新者・日時などをしりたい
$ git log MERGE_HEAD -1 test.png
commit 2ed1557d6014eef1aaaa9b5993d20c9d4ba1bf12
Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
Date: Thu Jul 21 16:10:41 2016 +0900
fix again
手元のファイルの最終更新者・日時などをしりたい
$ git log ORIG_HEAD -1 test.png
commit 3ab69796745c72b89eec17f9e945fb7427cd8c4c
Author: Yoshiki Shibukawa <yoshiki@shibu.jp>
Date: Tue Jul 12 12:32:30 2016 +0900
edit at original repository
ファイルの更新日時を取得
gitブランチを変更日時順に取得
Rubyを使っているけど
gitのワークのステータスを確認
git statusを利用したリポジトリ情報のプロンプト表示
$ git status --porcelain
-z
を付けると行区切りじゃなくてnull区切りになるっぽいので、プログラムでの処理のしやすさはさらにアップしそう。
ここにはステータスのとりうる組み合わせが書かれている。UUだと両方が変更してコンフリクト。
X Y Meaning
-------------------------------------------------
[MD] not updated
M [ MD] updated in index
A [ MD] added to index
D [ M] deleted from index
R [ MD] renamed in index
C [ MD] copied in index
[MARC] index and work tree matches
[ MARC] M work tree changed since index
[ MARC] D deleted in work tree
-------------------------------------------------
D D unmerged, both deleted
A U unmerged, added by us
U D unmerged, deleted by them
U A unmerged, added by them
D U unmerged, deleted by us
A A unmerged, both added
U U unmerged, both modified
-------------------------------------------------
? ? untracked
! ! ignored
-------------------------------------------------
削除されたファイル一覧を取得
$ git log --diff-filter=D --summary
特定のコミットに含まれるファイルを復元
↑の場合、削除したタイミングではすでに実態がないため、
$ git show ハッシュ^:ファイルのパス
で復元可能。