- 前提
- 設定
- 使い方
- 使い方いろいろ
- ローカルの変更内容確認
- コミット予定の内容確認
- ログをツリー表示する
- 他のブランチのコミットを適用する
- 複数のコミットを1つのコミットにまとめる
- 1つ前のコミットを修正する
- コミット前に戻す
- コミット同士の差分
- リモートの情報表示
- ブランチの追跡情報表示
- リモート追跡を設定する(上流ブランチをセットする)
- リモート追跡をやめる(上流ブランチをアンセットする)
- 過去のコミットからブランチを作る
- 指定した文字列を含む変更をログから探す
- 操作を誤った時
- 指定したハッシュ値がどのブランチに含まれているか確認
- 未プッシュのブランチを表示
- 未プッシュのタグを表示
- 特定のディレクトリ、ファイルに影響するコミットを表示する
- タグ
- GitでExcelの差分を表示する
- Gitでよく使われるコマンドをイラストで説明
- GUIツール
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/<branch> ローカルブランチ
リモート追跡をやめる(上流ブランチをアンセットする)
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でよく使われるコマンドをイラストで説明
GUIツール
git標準
http://www.devlog.alt-area.org/?p=1874
gitk gitk --all git gui
[カテゴリ: プログラミング全般]
[通知用URL]
Tweet
最終更新時間:2023年11月25日 08時55分39秒