http://blog.digital-squad.net/article/123090058.html http://d.hatena.ne.jp/naokirin/20111201/1322576109 http://wadahiro.hatenablog.com/entry/20101110/1289401605 http://sourceforge.jp/magazine/09/02/02/0655246 http://git-scm.com/book/ja/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-%E6%9C%80%E5%88%9D%E3%81%AEGit%E3%81%AE%E6%A7%8B%E6%88%90 https://qiita.com/take4s5i/items/15d8648405f4e7ea3039 https://camo.qiitausercontent.com/a6c07de17c4d1bfacbb8e406621fdaf60c7f484a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f37303334322f30343030313061652d306431662d613237322d393362352d3431653036656330643031302e706e67 https://dackdive.hateblo.jp/entry/2016/06/06/203542 http://tm.root-n.com/unix:command:git:bash_prompt https://qiita.com/takayukioda/items/13c65d1b10348e79461b !!!前提 コマンドと[[tig]]を使うのが良いと思う。 ditfftoolはwinmergeかmeld。 !!!設定 !!Windowsの場合 https://gitforwindows.org/ ポータブル版msysgit がオススメ。 DLして解凍。 !!.gitconfig localの設定 対象リポジトリの .git/config global ~/.gitconfig !gitconfgのサンプル [user] name = ユーザ名 email = xxxx@aaa.bb.cc [core] ; git statusでのマルチバイトをエスケープしない quotepath = false ; エディタ editor = vim -c \"set fenc=utf-8\" excludesfile = ~/.gitignore_global attributesfile = ~/.gitattributes [color] ; diff, status, branchの表示に色を付ける diff = auto status = auto branch = auto ; difftoolでmeldを使う [diff] tool = meld [difftool "meld"] cmd = meld $LOCAL $REMOTE [difftool "guidiff"] cmd = meld $LOCAL $REMOTE [difftool "vimdirdiff"] cmd = vim -c \"DirDiff $LOCAL $REMOTE\" [difftool "guidiff_view"] cmd = f=$(dirdiff.sh $LOCAL $REMOTE) && sh -c \"meld $f && rm -rf $f\" [difftool "vimdirdiff_view"] cmd = f=$(dirdiff.sh $LOCAL $REMOTE) && sh -c \"vim -c \\\"DirDiff $f\\\" && rm -rf $f\" [difftool "WinMerge"] cmd = xxx/WinMergePortable.exe -u -r \"$LOCAL\" \"$REMOTE\" [difftool] prompt = false [diff "xlsx"] binary = true textconv = xlsx2csv -a ; mergetoolでmeldを使う [merge] tool = meld ff = false [mergetool "meld"] cmd = meld $LOCAL $BASE $REMOTE --auto-merge --output $MERGED [mergetool] prompt = false [alias] graph = log --graph --date=short --pretty=\"format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset\" [pull] ff = only !!.gitattributes *.xlsx diff=xlsx *.XLSX diff=xlsx !!.bashrc git-completionを使えるようにしておくと便利。 また、プロンプトにgitの状況を表示するために.bashrcに以下を追記しておくと見やすい。 # git gitps1=true GIT_CONTRIB_DIR=/usr/share/git-core/contrib if [ -r ${GIT_CONTRIB_DIR}/completion/git-prompt.sh ]; then . ${GIT_CONTRIB_DIR}/completion/git-prompt.sh gitps1="__git_ps1" fi GIT_PS1_SHOWDIRTYSTATE=true GIT_PS1_SHOWUNTRACKEDFILES=true GIT_PS1_SHOWSTASHSTATE=true GIT_PS1_SHOWUPSTREAM=auto export PS1='[\u@\h \W$(${gitps1})]\$ ' # デフォルト # '[\u@\h \W]\$ ' !!!使い方 !!proxy を設定する git config http.proxy http://my.proxy.url:80 とか git config http.proxy http://user:pass@my.proxy.url:80 恒久的に設定するには --global オプションを使って git config --global http.proxy http://my.proxy.url:80 !!リポジトリ作成 cd path/to/repo git init git init --bare とするとになります。(bareリポジトリ) bareリポジトリは、サーバ側のリモートリポジトリとして使うリポジトリを作成する際に使用します。 !!基本的なコマンド :git init:リポジトリ作成 :git --bare init:bare作業ファイルがなく、管理ファイルのみのリポジトリ(bareリポジトリ)作成。 :git add .:現在のワークツリーを記録する。コミットはされない。 :git add -u:ワークツリー内の全てのファイルを記録する。 :git add -A:新しく作成されたファイルを含めてインデックスに記録する。 :git add -p:どの変更を次回のコミットに含めるかを選択して、インデックスに記録する。 :git commit:-mオプションを省略すると、エディタが起動し、ログメッセージを残せる。 :git commit -m "最初のコミット":コミットする。 :git commit -a -m "ログメッセージ":gitt add -u した後すぐ git -commitのと同義。 :git commit -v:git commit、git diffの結果がまとめて表示される。 :git commit --amend:一つ前のコミットを破棄して新しくコミットする。 :git diff:前回のgit add 以降に加えた変更が確認できる。 :git diff HEAD:前回のgit commit 以降に加えた変更が確認できる。 :git diff --cached:最新のコミットと、インデックスの違いを表示。 :git status:git commitを実行した場合にどのファイルへの変更がコミットされ、どのファイルへの変更はコミットされないかと確認できる。 :git log --grep=パターン:ログメッセージを文字列を元に検索。複数の--grepオプションを指定した場合はOR検索になる。AND検索にするには--all-matchオプションを加える。 :git show:最新のコミットの内容を表示。 :git reset:インデックスを現在のHEADと同じにする。 :git revert: 指定したコミットID へ戻す :git checkout:ブランチを変更する :git checkout -b ブランチ名:新規にブランチを作成してそのブランチに移動する。 :git branch ブランチ名:ブランチ名のブランチを作成する :git branch:ブランチを全て表示する。現在のブランチの横に*が表示される。 :git merge ブランチ名:現在のブランチと、指定したブランチをマージする。 :git merge -Xignore-all-space ブランチ名:現在のブランチと、指定したブランチをスペースを無視してマージする。 :git clone A.git B.git:Aリポジトリをコピーする。 :git fetch:リポジトリから取得 :git pull:リポジトリから取得。追跡ブランチをマージ。git pull --rebase でマージではなく、rebaseする !!!使い方いろいろ !ローカルの変更内容確認 git difftool -d !コミット予定の内容確認 git difftool -d --staged または git difftool -d --cached !ログをツリー表示する log --graph --date=short --pretty="format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset" または、.gitconfigに [alias] graph = log --graph --date=short --pretty=\"format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset\" を設定して git graph !他のブランチのコミットを適用する git cherry-pick ハッシュ 範囲でコミットを指定するときは git cherry-pick ハッシュ..ハッシュ 始点となるコミットは 実際に cherry-pick したいコミットの1つ前を指定する !複数のコミットを1つのコミットにまとめる git rebase -i ハッシュ 指定するコミットはまとめるコミットの始点の1つ前をしていする ,コマンド,説明 ,(p)pick,コミットをそのまま残す。 ,(r)reword,コミットメッセージを変更。 ,(e)edit,コミット自体の内容を編集。 ,(s)squash,直前のpickを指定したコミットに統合。メッセージも統合。 ,(f)fixup,直前のpickを指定したコミットに統合。メッセージは破棄。 !1つ前のコミットを修正する git commit --amend stagedされているファイルがない場合はコミットメッセージを修正する。 stagedされているファイルがあれば、stagedされているファイルが1つ前のコミットに追加される。 !コミット前に戻す git reset HEAD git reset --head HEAD git clean git clean -f !コミット同士の差分 git diff ハッシュ ハッシュ !リモートの情報表示 git remote !ブランチの追跡情報表示 git branch -vv !リモート追跡を設定する(上流ブランチをセットする) git branch --set-upstream-to=origin/ ローカルブランチ !リモート追跡をやめる(上流ブランチをアンセットする) git branch --unset-upstream ローカルブランチ !過去のコミットからブランチを作る git checkout -b branch_name 336e00890fc03ba55563998d7459771649fb46b5 !指定した文字列を含む変更をログから探す git log -S "hogehoge" git log -p -S "hogehoge" -p は指定した文字列を含む変更箇所を表示する !操作を誤った時 マージしていないブランチを消したとかreset --hardしてしまった場合、 git reflog ローカル操作の履歴が見れる。 !指定したハッシュ値がどのブランチに含まれているか確認 git name-rev でハッシュ値をhuman-readableな形式を返す。 !未プッシュのブランチを表示 git push --all --dry-run !未プッシュのタグを表示 git push --tags --dry-run !特定のディレクトリ、ファイルに影響するコミットを表示する git log -- ディレクトリ名またはファイル名 見やすくするのに oneline を付けるのも良い git log --oneline -- ディレクトリ名またはファイル名 !!タグ !タグをつける git tag タグ名 !タグをリモートへプッシュ git push --tags !タグを削除 ローカル git tag -d タグ リモート git push origin :refs/tags/タグ名 !!!GitでExcelの差分を表示する !!git diff でexcelの差分を表示する xlsx2csvをインストールする pip3 install xlsx2csv .gitconfig [core] attributesfile = ~/.gitattributes [diff "xlsx"] binary = true textconv = xlsx2csv -a .gitattributes *.xlsx diff=xlsx *.XLSX diff=xlsx !!git difftool -d でxlsxの差分を表示する $LOCAL $REMOTE のxlsxをCSVに変換したディレクトリを用意して、そのディレクトリを比較する dirdiff.sh #!/bin/bash # pip install xlsx2csv if [ $# -le 1 ]; then echo 引数エラー: $* exit 1 fi function createDir() { src=$1 dest=$2 op=-rL if [ -d "$src" ]; then op=${op}T fi cp $op "$src" $dest find $dest -type f -iname "*.xlsx" | xargs -I @ sh -c 'xlsx2csv -a "@" "@.csv" && rm "@"' # find $dest -type f -iname "*.csv" | xargs -I f sh -c 'csvlook f > f.tmp ; cp f.tmp f && rm f.tmp' # find $dest -type f -iname "*.csv" | xargs -I @ sh -c 'tabulate -o "@.csv" -1 -s , -f grid "@"; cp "@.csv" "@" && rm "@.csv"' find $dest -type f -iname "*.csv" | xargs -I @ sh -c 'column -t -s, "@" > "@.csv" && cp "@.csv" "@" && rm "@.csv"' } # cmd = t1=`mktemp` && `pandoc -t plain $LOCAL >$t1` && t2=`mktemp` && `pandoc -t plain $REMOTE >$t2` && meld $t1 $t2 && rm -f $t1 $t dest1=$(mktemp -d) dest2=$(mktemp -d) createDir "$1" $dest1 createDir "$2" $dest2 echo $dest1 $dest2 .gitconfig [difftool "guidiff_view"] cmd = f=$(dirdiff.sh $LOCAL $REMOTE) && sh -c \"meld $f && rm -rf $f\" [difftool "vimdirdiff_view"] cmd = f=$(dirdiff.sh $LOCAL $REMOTE) && sh -c \"vim -c \\\"DirDiff $f\\\" && rm -rf $f\" !!!Gitでよく使われるコマンドをイラストで説明 https://qiita.com/kozzy/items/b42ba59a8bac190a16ab [Gitでよく使われるコマンドをイラストで説明|https://camo.qiitausercontent.com/a6c07de17c4d1bfacbb8e406621fdaf60c7f484a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f37303334322f30343030313061652d306431662d613237322d393362352d3431653036656330643031302e706e67] !!!GUIツール !!git標準 http://www.devlog.alt-area.org/?p=1874 gitk gitk --all git gui {{category2 プログラミング全般}}