こんにちは。佐藤(ま)です。
アライドでは「大佐」と呼ばれております。
今回は、普段Gitは使い慣れてるけどそれよりちょっと踏み込んだ操作をしたいという時に使える頻出コマンドを集めてみました。基本のコマンド操作+以下のコマンドがあればGUI操作をしている方もCUIだけで戦えるんじゃないかなーと思ってます。
git branch系
リモートブランチを含めたブランチ一覧表示
1 |
% git branch -a |
リモートブランチの削除状態も合わせて更新
1 2 |
# git branch -aとした時に削除されたブランチが残ってしまうのでpruneオプションで更新 % git fetch -p |
リモートブランチのユーザ名と時間を含めたブランチ一覧を表示する
1 2 |
# 誰のブランチか簡単にチェックできる % git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' |
ブランチを切る
1 |
% git checkout -b sample_branch |
remote originからブランチを切る
1 |
% git checkout -b sample_branch origin/sample_branch |
変更がありmergeされていないブランチを削除する
1 |
% git branch -d sample_branch |
ブランチを強制削除する
1 |
% git branch -D sample_branch |
git commit
git addと同時にコミットする(untracked filesは対象外)
1 |
% git commit -am 'commit message' |
コミットしたあとにそのコミットに変更を追加する
1 2 3 4 5 |
% git add [追加したい変更ファイル] % git commit --amend # addにあるものを拾って追加してくれる |
git push
git pushのdefault設定を確認,変更する
1 2 3 4 5 6 7 8 |
% git config --global push.default % [現在の設定表示] # matchingになっている人はsimpleかcurrentへ変更しておくことをオススメします。 % git config --global push.default simple[or current] # git push -fコマンドを打ってしまったときの大事故が予防できます。 |
複数のブランチをpushする
1 |
% git push -u origin master develop sample |
リモートブランチを削除する
1 |
% git push -u origin :develop :sample |
git remote
リモートリポジトリの名前一覧を表示する
1 |
% git remote -v |
リモートリポジトリの設定を削除する
1 2 3 |
% git remote rm origin # remote-nameはoriginとしています。 |
リモートリポジトリのURL変更
1 |
% git remote set-url origin git@[domain]:[repository_name].git |
git stash
stashする
1 2 3 4 |
% git stash save 'sample' # untracked filesも一緒にstashしたい場合 % git stash save -u 'sample' |
stash一覧表示
1 |
% git stash list |
stash適用
1 |
% git stash pop[or apply] stash@{0} |
stash削除
1 |
% git stash drop stash@{0} |
git rm
trackedファイルを削除
1 |
% git rm A.txt |
ファイルを残しつつuntrackedとする
1 |
% git rm --cached A.txt |
コミット済みのファイルを削除せずignore対象とする
1 2 3 4 5 |
% git rm --cached A.txt % echo A.txt >> .gitignore % git commit -am 'add gitignore file' |
.gitignoreについてはGitHubが.gitignoreファイルのテンプレートを公開してくれているので新しいプロジェクトをはじめるときなどに参考になります。gitignore templete
git revert,git reset
特定のコミットをピンポイントで打ち消す
1 |
% git revert [hash] |
あるコミットまでリセットする
1 2 |
# --mixedはworking treeに,--softはstageに,--hardは削除 % git reset --mixed 1a01328135f2c0eed8f0fe55a357096853820761 |
コミットをまとめる
コミットをひとつにまとめる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
% git rebase -i [hash] # pickをひとつ残し他をsquashかfixupとすると1つにまとめられます。 pick 8615f2b commit message s d042fba commit message s ed4ee73 commit message s 3be1bc5 commit message # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell |
自分のブランチのコミット分すべて(masterとの差分だけ)をひとつにまとめる
1 2 3 4 5 6 7 8 9 |
% git branch master * sample_branch # 必要に応じてmasterをマージ % git merge master # masterとの差分のみrebase対象となります。 % git rebase -i master |
git diff,git log
masterとの差分のlogやdiffを表示する
1 2 3 4 5 |
% git merge master #必要に応じて % git log master..sample_branch % git diff master..sample_branch |
working treeとstageのdiffを表示する
1 |
% git diff |
HEADとstageのdiffを表示する
1 |
% git diff --cached |
working treeとHEADのdiffを表示する
1 |
% git diff HEAD |
git reflog
コマンド履歴から戻る
1 2 3 4 |
# gitのコマンド履歴を見たり戻したりといざという時に使えるコマンドです。 % git reflog % git reset --hard HEAD@{1} |
gitのalias
コマンドを利用しているといちいちgit ~と打っていられないのでaliasを利用します。
oh-my-zshを利用
oh-my-zshをつかっていればあらかじめgitのaliasが設定されているので便利です。
https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh
http://jasonm23.github.io/oh-my-git-aliases.html
すべてこちらのルールに従うのも良いですし、自分で使いやすいようにaliasを変更してもよいと思います。
.gitconfigを利用
必要に応じて~/.gitconfigにaliasを設定してもよいと思います。
1 2 3 4 5 |
[alias] sync = !git checkout master && git pull origin master && git fetch -p origin && git branch -d $(git branch --merged | grep -v master | grep -v '*') for-each = for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname) ' logg = log --stat --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cr %Cblue%cn%Cred%d %Creset%s %C(cyan)%b' history = log --graph --date=short --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cd %Cblue%cn%Cred%d %Creset%s' |
※コマンド参考元
Wantedlyで開発するときにとりあえず設定してもらう事一覧
git svn clone
最後はsvnからgitへ移行する為のコマンドです。めったに使うことはありませんが、svnからgitへの移行は以下のコマンドで簡単に行えます。
svnからgitへ移行する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# svnのソースをローカルへclone % git svn clone -s [repository_url] % git svn clone -s http://domain_name/repository_name/ # 履歴が多すぎる場合は他の方法を利用する必要あり % cd [local-repo] % git remote add origin git@[domain]:[repository_name].git % git push -u origin master # 必要に応じて他のブランチもcheckoutしてpush # 細かく指定する場合はこちらの方法も可能 % git svn clone --trunk=[trunkのパス] --tags=[タグのパス] --branches=[ブランチのパス] [リポジトリURL] % git svn clone --trunk=trunk --tags=tag --branches=branches http://domain_name/repository_name/ |
Gitはコマンド操作の方が色々とオプションが使えて便利なので、GUIを使ってる方は是非コマンド操作へ移行してみてください。
アライドアーキテクツではエンジニアを随時募集しております。
興味があればぜひこちらの採用サイトからご応募ください。
よく使うであろうことをできるだけ分かりやすく発信していきます。 Gitの情報を無駄にキャッチアップしてます。