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 |
|
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
orgit log --oneline
1 2 3 4 5 6 7 |
|
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 |
|
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