gitわからなすぎ問題
gitって初心者殺しだよなって思ったのでこれを期に一から学び直す。
こういう抽象的、概念的な技術は触って失敗することで覚えるべき。
git init
これは後述のgit cloneしてくれば.gitディレクトリごとごっそり持ってくることになるので不要だが念のため。
最初に作成したプロジェクトをpushするときにそのディレクトリ以下のファイルを事前にgitの管理下に置くためのコマンド。
# git_testディレクトリを作成 vagrant@ubuntu-xenial:~/project$ mkdir git_test # ディレクトリを確認 vagrant@ubuntu-xenial:~/project$ ls -la total 12 drwxrwxr-x 3 vagrant vagrant 4096 Aug 20 08:37 . drwxr-xr-x 13 vagrant vagrant 4096 Aug 20 08:37 .. drwxrwxr-x 2 vagrant vagrant 4096 Aug 20 08:37 git_test # git_testディレクトリに降りる vagrant@ubuntu-xenial:~/project$ cd git_test/ # 何もないことを確認 vagrant@ubuntu-xenial:~/project/git_test$ ls -la total 8 drwxrwxr-x 2 vagrant vagrant 4096 Aug 20 08:37 . drwxrwxr-x 3 vagrant vagrant 4096 Aug 20 08:37 .. # git_testディレクトリ以下をgitの管理下に置く vagrant@ubuntu-xenial:~/project/git_test$ git init Initialized empty Git repository in /home/vagrant/project/git_test/.git/ # .git以下のディレクトリ構成 vagrant@ubuntu-xenial:~/project/git_test$ cat .git/ branches/ config description HEAD hooks/ info/ objects/ refs/ # プロジェクト領域の設定を確認(初期設定値) vagrant@ubuntu-xenial:~/project/git_test$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true
git config
これはgitでpushしたりする(後述)ときに誰のコミットなのかを事前に登録しておく手順。
だいたいプロジェクトでuser.nameは「名前.苗字」みたいにしてねとかルールがあるはずだからさらっとやっておく。
git config --list
現在のgitの設定をリスト形式で表示するオプションが--list。
vagrant@ubuntu-xenial:~$ git config --list user.email=dammy@gmail.com user.name=taaaak # aが4つ
git config --global 設定値
複数のリモートリポジトリで同じconfig設定を適用する場合、--globalオプションを利用する。
# マシンでgitを使用する際の名前を設定する(上書き) vagrant@ubuntu-xenial:~$ git config --global user.name "taaaaak" # aが5つ # 再度設定を表示 vagrant@ubuntu-xenial:~$ git config --list user.email=dammy@gmail.com user.name=taaaaak # 変わった # .gitconfigファイルに設定を反映される(ここがグローバル領域) vagrant@ubuntu-xenial:~$ cat ~/.gitconfig [user] email = dammy@gmail.com name = taaaaak
git config 設定値
個別でconfig設定を適用する場合、そのプロジェクトのルートディレクトリでオプションをつけずにコマンドを実行する。
# プロジェクトルートまで降りる vagrant@ubuntu-xenial:~$ cd tmp/project/ajaxapi/ # 設定を表示 vagrant@ubuntu-xenial:~/tmp/project/ajaxapi$ git config --list user.email=dammy@gmail.com user.name=taaaaak core.editor=vim -f core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true remote.origin.url=git@github.com:taaaaak/ajaxapi.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* # このプロジェクトを使用する際の名前を設定する vagrant@ubuntu-xenial:~/tmp/project/ajaxapi$ git config user.name "Taaaak" vagrant@ubuntu-xenial:~/tmp/project/ajaxapi$ git config --list user.email=dammy@gmail.com user.name=taaaaak core.editor=vim -f core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true remote.origin.url=git@github.com:taaaaak/ajaxapi.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* user.name=taaaak # 追加される # グローバル領域は変化なし vagrant@ubuntu-xenial:~/tmp/project/ajaxapi$ cat ~/.gitconfig [user] email = dammy@gmail.com name = taaaaak # 変化なし # ローカル領域?プロジェクト領域?にtaaaakが追加される vagrant@ubuntu-xenial:~/tmp/project/ajaxapi$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true [remote "origin"] url = git@github.com:taaaaak/ajaxapi.git fetch = +refs/heads/*:refs/remotes/origin/* [user] name = taaaak
git clone URL(※URLの部分は適宜自分の環境に読み替えること)
リモートリポジトリのプロジェクトファイルをごっそりローカルリポジトリにクローン(コピー)するコマンド。
上述のgit initするとできる.gitディレクトリや.gitignoreファイルなどgitでプロジェクト管理するために必要なものも入ってるはずなのでこれをやれば優しい世界になる。
# リモートリポジトリから現在のディレクトリにクローンする vagrant@ubuntu-xenial:~/project$ git clone git@github.com:taaaaak/ajaxapi.git Cloning into 'ajaxapi'... remote: Counting objects: 93, done. remote: Compressing objects: 100% (78/78), done. remote: Total 93 (delta 2), reused 93 (delta 2), pack-reused 0 Receiving objects: 100% (93/93), 22.88 KiB | 0 bytes/s, done. Resolving deltas: 100% (2/2), done. Checking connectivity... done. vagrant@ubuntu-xenial:~/project$ ls -la total 16 drwxrwxr-x 4 vagrant vagrant 4096 Aug 20 16:52 . drwxr-xr-x 13 vagrant vagrant 4096 Aug 20 16:27 .. drwxrwxr-x 13 vagrant vagrant 4096 Aug 20 16:52 ajaxapi # 作成された drwxrwxr-x 3 vagrant vagrant 4096 Aug 20 09:27 git_test
git add
ワーキングツリーからステージング領域に変更点を上げるためのコマンド。
本来はここに積み上げられた変更点をまとめてコミットするための領域だが、addとcommitを同時にやることも多い(後述)。
git add -A
変更点のみワーキングツリーからステージングエリアにのせるオプション。
git add .
はカレントディレクトリ以下全て、-Aは変更点のみ。
vagrant@ubuntu-xenial:~/project/git_test$ vi a.txt vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa vagrant@ubuntu-xenial:~/project/git_test$ git add -A
git commit
ステージングエリアに溜まった変更を機能単位でローカルリポジトリにコミットするためのコマンド。
git commit -m "コメント"
コミットの際にあらかじめコメントを書いておくためのオプション。
これがない場合、nanoやvimが開き、エディタ上でコメントしないといけない。
正直慣れていたとしても面倒なのでコメントはcommitのタイミングで書いておくのがいい。
vagrant@ubuntu-xenial:~/project/git_test$ git commit -m "a.txtを作成(1:aaa)" [master (root-commit) 3e924c2] a.txtを作成(1:aaa) 1 file changed, 1 insertion(+) create mode 100644 a.txt
git commit --amend
前回のコミットに変更点を追加するときに使うコマンド。
コミットハッシュは変わる。
コメントを変更しない場合は、--no-editを使う。
git remote add
git initしたあとに行うコマンド(add, commitした後にやってもいい)。
これでローカルリポジトリとリモートリポジトリの紐付けを行う。
originはURLの別名で、git pushなどリモートリポジトリへの変更をするようなコマンドを実行するときにこの別名を使って実行できるようになる。
これから楽をするためのエイリアスみたいなやつ。
git remote add origin リモートリポジトリ名
リモートリポジトリはhttp://~でもgit@~でもどちらでもOK。
vagrant@ubuntu-xenial:~/project/git_test$ git remote add origin git@github.com:taaaaak/git_test.git
git push
ローカルリポジトリのコミットをリモートリポジトリに反映させるコマンド。
git push -u origin ブランチ名
-uオプションはupstream(上流ブランチ)を指定するもので、以降は何も指定しなければリモートのmasterブランチにpushされる。
vagrant@ubuntu-xenial:~/project/git_test$ git push -u origin master Counting objects: 3, done. Writing objects: 100% (3/3), 235 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:taaaaak/git_test.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
git checkout
git checkout branch名
ブランチを切り替えるためのコマンド。
git checkout file名
ファイル名を指定した場合はHEADと同じ状態に戻すコマンド。
git checkout .
でワーキングツリーを最後のコミットの状態に戻す。
git checkout -b branch名
チーム開発においてmasterブランチで作業することはタブーのため、自分用の作業ブランチを切るときに使う。
本当はgit branch buranch名で作業ブランチを作成できるが、-bオプションで作成したブランチに移動するまで一度にやってくれる。
派生元を指定する場合は最後に派生元を追加する。
git checkout -b ticket/branch_2 origin/ticket/branch_1
vagrant@ubuntu-xenial:~/project/git_test$ git checkout -b ticket/001 Switched to a new branch 'ticket/001'
git branch
ブランチの操作をするためのコマンド。
ブランチを作ったり、削除したり、一覧表示したりできる。
git branch -a
git branchは現在のローカルブランチを全て一覧表示するコマンドだが、-aオプションでリモートの追跡をするローカルブランチも含めて一覧表示するためのコマンド。
追跡ブランチはremotes/origin/masterのように先頭ディレクトリにremotesが入ってる。
vagrant@ubuntu-xenial:~/project/git_test$ git branch -a master * ticket/001 remotes/origin/master
git branch -d branch名
リモートリポジトリにpush済みのローカルブランチを削除するためのコマンド。
このコマンドを実行するには、master等のブランチに移動しておく必要がある。
push等反映されていない場合、強制削除するには-dの代わりに-Dオプションを実行する。
# リモートに変更点をマージしたのでいらないから消す vagrant@ubuntu-xenial:~/project/git_test$ git branch -d ticket/001 Deleted branch ticket/001 (was 99c6f3f). vagrant@ubuntu-xenial:~/project/git_test$ git branch -a * master # なくなった remotes/origin/master remotes/origin/ticket/001
git branch -dr 追跡ブランチ名
上記で残った追跡ブランチを削除するためのコマンド。
vagrant@ubuntu-xenial:~/project/git_test$ git branch -dr origin/ticket/001 Deleted remote-tracking branch origin/ticket/001 (was 99c6f3f). vagrant@ubuntu-xenial:~/project/git_test$ git branch -a * master remotes/origin/master # なくなった
git pull
リモートの最新ブランチをfetchしてmergeするコマンド。
fetchは追跡ブランチをリモートの最新と同期すること。
mergeはそれを現在のブランチに反映(差分更新)させること。
ほかのブランチには反映させない。
vagrant@ubuntu-xenial:~/project/git_test$ vi a.txt vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb # addをせずに直接ローカルリポジトリに変更点をコミットするには-aオプションをつける vagrant@ubuntu-xenial:~/project/git_test$ git commit -am "add record 'bbb' in 2line to a.txt" [ticket/001 99c6f3f] add record 'bbb' in 2line to a.txt 1 file changed, 1 insertion(+) # github-flowにしたがってリモートのticket/001にpush vagrant@ubuntu-xenial:~/project/git_test$ git push origin ticket/001 Counting objects: 3, done. Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:taaaaak/git_test.git * [new branch] ticket/001 -> ticket/001 # リモートリポジトリのmasterブランチにticket/001の変更をマージ(プルリクエスト) ※GitHub上での作業
# ローカルのmasterに移動 vagrant@ubuntu-xenial:~/project/git_test$ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa # 上流ブランチ(リモートのmaster)から変更をpull vagrant@ubuntu-xenial:~/project/git_test$ git pull remote: Counting objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (1/1), done. From github.com:taaaaak/git_test 3e924c2..ba2b172 master -> origin/master Updating 3e924c2..ba2b172 Fast-forward a.txt | 1 + 1 file changed, 1 insertion(+) vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb # mergeされた vagrant@ubuntu-xenial:~/project/git_test$ git branch -a * master ticket/001 remotes/origin/master remotes/origin/ticket/001 # fetchした
git status
現在のワークツリー、ステージングの状態を表示するコマンド。
# ワークツリー上で作業中のときのステータス vagrant@ubuntu-xenial:~/project/git_test$ git status On branch ticket/001 Changes not staged for commit: # コミット対象にステージングされてないよって意味 (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")
vagrant@ubuntu-xenial:~/project/git_test$ git add -A # ステージング領域に変更点が積まれたときのステータス vagrant@ubuntu-xenial:~/project/git_test$ git status On branch ticket/001 Changes to be committed: # コミット対象に指定されていて、コミット待ちだよって意味 (use "git reset HEAD <file>..." to unstage) modified: a.txt
# コミット後のステータス vagrant@ubuntu-xenial:~/project/git_test$ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
git log
現在のブランチの変更履歴を表示するコマンド。
vagrant@ubuntu-xenial:~/project/git_test$ git log commit ba2b1720e218f82afe2645635836bf7b9ad08bdd Merge: 3e924c2 99c6f3f Author: taaaaak <dammy@gmail.com> Date: Mon Aug 20 09:23:26 2018 +0900 Merge pull request #1 from taaaaak/ticket/001 add record 'bbb' in 2line to a.txt commit 99c6f3f27aebad184620e35874f80a60d4780864 Author: taaaaak <dammy@gmail.com> Date: Mon Aug 20 09:15:14 2018 +0900 add record 'bbb' in 2line to a.txt commit 3e924c2fb1438461a8eaaa1ea7ced35c82b7d999 Author: taaaaak <dammy@gmail.com> Date: Mon Aug 20 08:54:07 2018 +0900 a.txtを作成(1:aaa)
git log --one-line
コミット履歴が1行ごとに表示される。
git log --graph --all --format="%x09%an%x09%h %d %s"
git logをtigみたいにするワンライナー
git diff
変更箇所を表示させるコマンド。
ワーキングツリーにしかなければオプションなしで変更点が表示される。
git diff HEAD^..HEAD
コミット済みの最新のコミットの変更点とその一つ前の変更点を比較するコマンド。
一つ前は"^"だが、2つ以上前のコミットと比較する場合、"~2"みたいに書く。
比較演算子?".."を基準に右が最新、左が比較元で覚える(本質はdiffなのでどちらでもいいが)。
".."ではなく、" "(半角スペース)で区切ってもいい。
# 現在のブランチと一つ前の差分を確認 vagrant@ubuntu-xenial:~/project/git_test$ git diff HEAD^..HEAD diff --git a/a.txt b/a.txt index 72943a1..dbee026 100644 --- a/a.txt +++ b/a.txt @@ -1 +1,2 @@ aaa +bbb
vagrant@ubuntu-xenial:~/project/git_test$ git checkout -b ticket/002 Switched to a new branch 'ticket/002' vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb # 3行目にcccdddを追加 vagrant@ubuntu-xenial:~/project/git_test$ vi a.txt # 未コミットの現在のブランチの差分を確認 vagrant@ubuntu-xenial:~/project/git_test$ git diff diff --git a/a.txt b/a.txt index dbee026..1802a74 100644 --- a/a.txt +++ b/a.txt @@ -1,2 +1,3 @@ aaa bbb +cccddd
# ブランチ同士で差分をとる(masterをちょっと進めた) vagrant@ubuntu-xenial:~/project/git_test$ git diff ticket/002 master diff --git a/a.txt b/a.txt index 45240d3..20536af 100644 --- a/a.txt +++ b/a.txt @@ -1,3 +1,3 @@ aaa bbb -fffggg # masterの進めた差分 +cccddd # 今回進めたticket/002の差分
# コミット済みの場合何も表示されない vagrant@ubuntu-xenial:~/project/git_test$ git diff
git merge
指定したブランチを今いるブランチにマージ(合体)させるためのコマンド。
変更点でコンフリクトがなければ自動的にマージしてくれる。
github-flowではこのコマンドは不要。
git merge branch名
# masterブランチに移動 vagrant@ubuntu-xenial:~/project/git_test$ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. # ticket/002をmasterにマージ vagrant@ubuntu-xenial:~/project/git_test$ git merge ticket/002 Auto-merging a.txt CONFLICT (content): Merge conflict in a.txt # コンフリクト(衝突)した Automatic merge failed; fix conflicts and then commit the result. vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb <<<<<<< HEAD cccddd ======= fffggg >>>>>>> ticket/002 # 両方を利用してcccdddfffgggにした vagrant@ubuntu-xenial:~/project/git_test$ vi a.txt vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb cccdddfffggg # 衝突を修正したらaddしろと言われる vagrant@ubuntu-xenial:~/project/git_test$ git merge ticket/002 error: merge is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict. vagrant@ubuntu-xenial:~/project/git_test$ git add -A # 当然commitしろと言われる vagrant@ubuntu-xenial:~/project/git_test$ git merge ticket/002 fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you merge. vagrant@ubuntu-xenial:~/project/git_test$ git commit -m "コンフリクトを解消" [master 7c83e5b] コンフリクトを解消 # ようやくマージできた vagrant@ubuntu-xenial:~/project/git_test$ git merge ticket/002 Already up-to-date.
vagrant@ubuntu-xenial:~/project/git_test$ cat a.txt aaa bbb cccdddfffggg eeeee
git merge --no--ff branch名
--no-ff
はnon fast-fowardの略。
枝分かれしない場合のマージはマージしない(わかりづらいかw)。
枝分かれする場合のマージのみマージする。
git merge --ff-only branch名
--ff-only
はfast-foward onlyの略。
枝分かれする場合のマージはマージしない。
枝分かれしない場合のマージのみマージする。
マージ元ブランチの霊圧が消えるからエンジニアからは嫌われる。
git revert
コミットを指定して打ち消しコミットを実行するコマンド。
後述のresetがコミットをなかったものにするのに対してこっちは打ち消しコミットを作るのでコミット履歴が残る。
リモートリポジトリにコミットが残ってしまっている場合はこっちをするのが無難。
同じ要領でresetして強制pushすると嫌な顔をされる。
git reset
commitをなかったことにするコマンド。
revertは元に戻す(=履歴は残る)が、こちらは残らない。
ローカルでいくらやっても問題ないけど、リモートにpush済みのコミットに対してこれやると「クソが!」って思われる。
意地悪をしたい先輩がいたらやってもいい。
もし戻したくなったらgit reflogする(後述)。
git reset (--mixed) HEAD^
一つ前のコミットの変更をワーキングツリーまで戻すコマンド。
--mixed
はデフォなのでなくてもいい。
# ひとまずコミット vagrant@ubuntu-xenial:~/project/git_test$ git commit -am "reset用" [master efb52b5] reset用 1 file changed, 1 insertion(+) # ワーキングツリーまで変更を戻す vagrant@ubuntu-xenial:~/project/git_test$ git reset --mixed HEAD^ Unstaged changes after reset: M a.txt # 確認してみる vagrant@ubuntu-xenial:~/project/git_test$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")
git reset --soft HEAD^
ステージングエリアまで変更を戻すコマンド。
# もう一回コミット agrant@ubuntu-xenial:~/project/git_test$ git add -A vagrant@ubuntu-xenial:~/project/git_test$ git commit -m "reset用2" [master e54a719] reset用2 1 file changed, 1 insertion(+) # ステージングエリアまで戻す vagrant@ubuntu-xenial:~/project/git_test$ git reset --soft HEAD^ # 確認してみる vagrant@ubuntu-xenial:~/project/git_test$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: a.txt
git reset --hard HEAD^
現在のブランチを一つ前のコミットまで戻すコマンド。
変更点もリセットされるので修正中の場合注意して行うこと。
# もう一回コミット vagrant@ubuntu-xenial:~/project/git_test$ git commit -m "reset用3" [master ac60662] reset用3 1 file changed, 1 insertion(+) # 一個前のコミットまで戻す vagrant@ubuntu-xenial:~/project/git_test$ git reset --hard HEAD^ HEAD is now at 7c83e5b コンフリクトを解消
vagrant@ubuntu-xenial:~/project/git_test$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a") vagrant@ubuntu-xenial:~/project/git_test$ git commit -a --amend --no-edit [master b945782] コンフリクトを解消 Date: Mon Aug 20 17:48:26 2018 +0900 vagrant@ubuntu-xenial:~/project/git_test$ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commit each, respectively. (use "git pull" to merge the remote branch into yours) nothing to commit, working directory clean
git rebase
ブランチを違うブランチに付け替えるコマンド。
分岐した兄弟ブランチ同士で変更を統合させたり不要なブランチを取りこんだりするときに使う。
git rebase -i
対話的にリベースするコマンド。
git rebase --continue
リベース作業を確定させるオプション。
git reflog
今までの変更履歴を全て表示させるコマンド。
git resetで削除したコミットを復活させることもできる。
vagrant@ubuntu-xenial:~/project/git_test$ git reflog 7c83e5b HEAD@{0}: checkout: moving from ticket/003 to master 7c83e5b HEAD@{1}: checkout: moving from master to ticket/003 7c83e5b HEAD@{2}: checkout: moving from a to master 7c83e5b HEAD@{3}: checkout: moving from master to a 7c83e5b HEAD@{4}: checkout: moving from ticket/002 to master aa6eb6b HEAD@{5}: checkout: moving from master to ticket/002 7c83e5b HEAD@{6}: commit (merge): コンフリクトを解消 060d820 HEAD@{7}: checkout: moving from ticket/002 to master aa6eb6b HEAD@{8}: commit: add record 3:eeefff to a.txt ba2b172 HEAD@{9}: checkout: moving from master to ticket/002 060d820 HEAD@{10}: commit: add record 3:cccddd to a.txt f3fb39c HEAD@{11}: commit: add record 3:ccc to a.txt ba2b172 HEAD@{12}: checkout: moving from ticket/003 to master ba2b172 HEAD@{13}: checkout: moving from ticket/002 to ticket/003 ba2b172 HEAD@{14}: checkout: moving from master to ticket/002 ba2b172 HEAD@{15}: pull: Fast-forward 3e924c2 HEAD@{16}: checkout: moving from ticket/001 to master 99c6f3f HEAD@{17}: commit: add record 'bbb' in 2line to a.txt 3e924c2 HEAD@{18}: checkout: moving from master to ticket/001 3e924c2 HEAD@{19}: commit (initial): a.txtを作成(1:aaa)
git blame ファイル名
ファイルの変更履歴を行単位で確認できる。
ここでコミットハッシュ値を取得してからgit show
すると幸せになれる。
git show コミットハッシュ
ローカルリポジトリのコミット情報を取得するためのコマンド。
何も指定しなければ、直近のコミット情報を取得する。
vagrant@ubuntu-xenial:~/project/git_test$ git show commit 7c83e5b38f2d22463d5cebabc23866d556f400ce Merge: 060d820 aa6eb6b Author: taaaaak <dammy@gmail.com> Date: Mon Aug 20 17:48:26 2018 +0900 コンフリクトを解消 diff --cc a.txt index 20536af,45240d3..cac8aec --- a/a.txt +++ b/a.txt @@@ -1,3 -1,3 +1,3 @@@ aaa bbb - cccddd -fffggg ++cccdddfffggg
git remote show コミットハッシュ
リモートリポジトリの情報を取得するためのコマンド。
vagrant@ubuntu-xenial:~/project/git_test$ git remote show origin vagrant@ubuntu-xenial:~/project/git_test$ git remote show origin * remote origin Fetch URL: git@github.com:taaaaak/git_test.git Push URL: git@github.com:taaaaak/git_test.git HEAD branch: master Remote branches: master tracked ticket/002 tracked Local branches configured for 'git pull': master merges with remote master ticket/002 merges with remote ticket/002 Local refs configured for 'git push': master pushes to master (up to date) ticket/002 pushes to ticket/002 (up to date)
git fetch
リモートリポジトリのブランチをローカルリポジトリと同期してくれる。
どのディレクトリでやっても同じ。
git fetch --prune
リモートリポジトリで削除されたブランチをfetchしたら(同一の)ローカルブランチを消してくれる。
git grep
git管理下のファイルやファイル内の名前から該当の文字列を検索して表示してくれる。
むっちゃ使う。
git show-branch
編集中
vagrant@ubuntu-xenial:~/project/git_test$ git show-branch * [master] コンフリクトを解消 ! [ticket/002] add record 3:eeefff to a.txt ! [ticket/003] コンフリクトを解消 ! [ticket/004] a.txtを作成(1:aaa) ---- - [master] コンフリクトを解消 - [ticket/003] コンフリクトを解消 *++ [ticket/002] add record 3:eeefff to a.txt * + [master^] add record 3:cccddd to a.txt * + [master~2] add record 3:ccc to a.txt --- [master~3] Merge pull request #1 from taaaaak/ticket/001 *++ [master~3^2] add record 'bbb' in 2line to a.txt *+++ [ticket/004] a.txtを作成(1:aaa)
次やる
tigの使い方