6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

バッチ処理でgitから情報を取得してくるメモ

Last updated at Posted at 2016-06-16

必要に応じて追記していきます。追加の依頼は大歓迎です。

.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 ハッシュ^:ファイルのパス

で復元可能。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?