Skip to content

Git command line cheat sheet

Class Archive

Class Archive has a bunch of examples. Followings are some that I took memo from personal work.

Local version management

git add -A
管理対象に追加
git add .
カレントディレクトリ直下の全てを管理対象に追加
git add -u
管理対象を更新
git commit -m "commit message"
ローカルブランチへのcommit
git commit --amend -e
直近のcommitメッセージの修正
git commit --amend
git addしてから実施すると、直近のコミットを修正できる
git checkout -b "branch name"
branchを作成する
git checkout "branch name"
branchにチェックアウトする
git branch -a
branchをすべて表示する
  • origin/master : リモートのマスター
  • master : ローカルのマスター
git branch -D "branch name"
branchを削除する
git log
commit historyの表示
git log --decorate
commit historyの表示(tag名、対象のbranchを表示)
git log --oneline
1行ごとのコミットリストを表示。
git stash "file path"
gitの管理下から対象を除外する
git count-objects -vH
gitレポジトリの総サイズをチェックする
Ref.Gitリポジトリの総サイズを取得する方法のまとめ
git log --diff-filter=D —summary
コミット履歴の中でファイルの削除だけが含まれているコミットだけを抽出し、削除されたファイル名を表示する。

Remote repository management

git push origin "branch name"
コミットをリモートにpushする。
git push origin HEAD と記述するとわざわざブランチ名を書かなくてよくなる
git remote -v
自分のローカルのリポジトリと紐づいているリモートリポジトリを表示する
履歴からファイルを削除する(リモートにも反映)
1
2
3
    git filter-branch --tree-filter "rm -f [消したいファイルパス]" HEAD
    git gc --aggressive --prune=now
    git push -f

Download (fetch, marge, pull, rebase)

mergeとrebaseの違い
http://nullnote.com/web/git/merge_rebase/
  • merge: 合流
  • git merge <開発branch> : master branchに開発branchのcommitを足す
  • 2種類ある
    • git merge <開発branch> (Fast-Forward : 早送り) masterの内容を最新の開発branchまで進める
    • git merge —no-ff <開発branch> (Non Fast-Forward : 早送りなし) maser側でコミットがある場合に、その後に、マージコミット(マージの結果作られたコミット)を作成する
rebase: 付替/改床
  • git checkout <開発branch> して、<開発branch>上で git rebase <更新版のmaster>
  • 開発branchをrebaseする(英語では rebase development branch)、開発branchを改床し、更新版のmasterの後に付け替える
  • rebase前とrebase後で、1. Commit ID, 2.親コミット(1個前のcommit)の値が変わる -> 全く新しいcommitになる
git pull
fetch してmergeする(merge コミットを発生させる。fast-cowardの場合は発生させない)
git pull --rebase
fetchしてrebaseする (merge commitを発生させない。リモートとローカル間で履歴をシンプルに保つ) - git pull --rebase とは
git rpullのエイリアス指定
git config --global alias.rpull
  • pull --rebase でセットアップ。

pull/merege/rebase situation - 状況別

1) リモートとローカルで統合branch(master)の変更箇所を統合したい場合

  • git checkout master
  • git pull --rebase

2) ローカルでtopic branchに対する変更箇所を統合branch(master)へ統合したい場合

  • git checkout master
  • git merge --no--ff "topic-branch"

3) ローカルで統合branch(master)に対する変更箇所をtopic branchに統合する場合

  • git checkout "topic-branch"
  • git rebase master

4) ローカルでリモートの統合branch(origin/master)に対する変更箇所をtopic branchに統合する場合

  • git rebase -i "rebaseの参照先branch"
    • 現在checkout中のbranchに対して、参照先branchをrebaseする
  • git rebase -i origin/master
  • checkout中のlocal branchのモジュールが、origin/masterによりrebaseされ、最新のorigin/masterの内容がTOPに置かれる

Recovery - やらかしたとき

Recover local work to the latest commit

git checkout .
ローカルを全て最新のコミット状態に戻す
git checkout “file path”
ローカルの個別のファイルを元に(前回コミットした時点に)戻す

Recover to the specific commit

git checkout “Commit hash” “file path”
特定のファイルを特定のコミットに戻す

Warning

git checkout "Commit hash"ではDetached HEADになるため、その後、git checkout -b <ブランチ名>でブランチを作成し、ブランチ上で作業する。

git reset --hard "commit hash"
直近のコミットをワーキングツリーから消す
  • option: 直前のコミットの内容をワーキングツリーから削除するため、 –hard を指定
  • commit: 2つ前のコミットまで戻るので、 HARD^ もしくは コミットのハッシュ値を指定
  • Check detailed log by git log —name-status or git log --oneline
1
2
3
4
5
6
7
# HEAD^ : reset the latest commit
`git reset --hard HEAD^`
HEAD is now at 5e6448d Added file.txt

# Commit hash: reset to the specific commit
`git reset --hard 5e6448ddb2c4ecd12ec24175e58c49582836b45a`
HEAD is now at 5e6448d Added file.txt

Remove file from git management

git rm --cached "file path"
該当のファイルをGitの管理対象から除外する

Warning

git rm "file path" と、–cached をつけないで実行するとファイルを削除してしまうので注意。

Reset commit (コミットした変更を取り消す)

git reset --hard "commit hash value"
いったん、自分で直してしまった余計なコミットは、

squash (コミットを1つにまとめる)

git rebase -i HEAD~4
git logで表示される複数のcommitをSquashし、1つにまとめる. Interactiveなメニューで以下のように対象を指定。pickの対象commitに, squashの対象commitをまとめる
1
2
3
4
5
6
pick 82fe89c add chart full width with text
squash 3e0d550 Deleted 'title' from chart_full_width_with_text
squash 6681fa4 Adding max size values for wide chart
squash a15c455 Ammend test code for CHART_FULL_WIDTH_WITH_TEXT

(Then, select `x`: to run command)

Warning

既にサーバーにPush済の場合、特にCI/CDなどが動いているとリカバリが面倒くさい。自信がない場合はあきらめてコミット履歴を残しましょう

Unrelated History in remote

git merge --allow-unrelated-histories origin/master
リモートとローカルで、”unrelated historiesのマージ”でエラーが起きた場合(fatal: refusing to merge unrelated histories)

Last update: April 9, 2021