基本的なコマンドを含めて備忘録として残しておく
実際のコード
基本的な流れ
- Git 初期化
git init
- Git 接続先設定
git remote add {Fork 元リモート名} {Fork 元接続先URL}
git remote add {Fork 先リモート名} {Fork 先接続先URL}
- 最新ソース取得
git pull {Fork 元リモート名} {ブランチ名}
- トピックブランチ作成
git checkout -b topic/#{issue番号}-作業者名
- 開発
- ステージングにあげる
git add -A
# untracked files を除いてステージングに挙げる場合は以下
git add -u
- コミットする
git commit -m "コメント"
- プルリクエストを投げる
git push {Fork 元リモート名} {ブランチ名}
※修正がある場合はgit addから先を繰り返し
その他
ローカルの修正を元に戻す
一部ファイルのみ戻す場合
※半角空白で区切ることで複数ファイル指定可
git checkout {ファイル1(ファイルパス付)} {ファイル2(ファイルパス付)}
全て元に戻す場合
git checkout .
untracked files をまとめて削除(削除対象表示)
※untracked files は変更ではないため以下を行う
git clean -n
# ディレクトリも含める場合
git clean -dn
untracked files をまとめて削除
git clean -f
# ディレクトリも含める場合
git clean -df
直前のコミットのコメントを修正
git commit --amend -m "直前のコミットのコメントを修正"
コミットをまとめる
# 2つ前までのコミットを修正
$ git rebase -i HEAD~~
#=> squash or s に編集
#=> コメントを修正
最新資産へのマージ
$ git pull --rebase origin master
# コンフリクトを修正
# コンフリクトの修正をマージする
$ git add -A
$ git rebase --continue
#=> ※git commitではないので注意
$ git push -f {リモート名} {ブランチ名}
#=> ※強制更新になるため注意
rebase しない場合は以下
例. topic ブランチに master ブランチをマージ
$ git checkout master
$ git fetch {リモート名}
$ git pull {リモート名} master
$ git checkout topic
$ git merge master
# コンフリクトを修正
# コンフリクトの修正をマージする
$ git add -A
$ git push -f {リモート名} topic
#=> ※強制更新になるため注意
git の状態を一つ前に戻す ※ローカルの変更はそのまま
git reset --soft HEAD^
git の状態を一つ前に戻す ※ローカルの変更も戻す
git reset --hard HEAD^
stash の一覧を表示
git stash list
stash 内のファイル一覧を表示
git stash show stash@{N}
stash の差分を表示
git diff HEAD stash@{N}
# or
git stash show -p stash@{N}
stash の差分を表示(ファイル指定)
git diff HEAD stash@{N} -- app/hoge.rb
stash の最新を適用
git stash pop
stash N 番目を適用
git stash pop stash@{N}
stash を全削除
git stash clear
stash の最新を削除
git stash drop
stash N 番目を削除
git stash drop stash@{N}
stash されたファイルの内、指定したファイルを復元
stash list で表示された stash list 番号およびファイル名を指定して取り出す
例. stash list 番号 0 の app/hoge.rb
ファイルを復元する
git checkout stash@{0} app/hoge.rb
untracked files を復元させる場合は以下
git checkout stash@{0}^3 app/hoge.rb
untracked files を含めて退避
git stash save -u "untracked files を含めて退避"
Fork 元の任意ブランチを親としてトピックブランチを作成
git checkout -b {new ブランチ名} {Fork 元のリモート名}/{Fork 元のブランチ名}
プルリクエストの取り下げ(プルリクエスト出す直前に取り消し)
git push --delete {Fork 先リモート名} {ブランチ名}
#=> `github` 上の 「Compare & pull request」ボタンが消える
プルリクエストの取り下げ(プルリクエスト出した直後に取り消し)
git push --delete {Fork 先リモート名} {ブランチ名}
#=> `github` 上は「close」扱いになる
リモートブランチの削除
git push --delete {Fork 先リモート名} {ブランチ名}
github 上の プルリクエストブランチをローカルに持ってくる
プルリクエストで push された branch を指定してもってくる
$ git fetch {リモート名}
# 例. ブランチ sample_branch を持ってくる場合
$ git checkout -b {new ブランチ名} origin/sample_branch
もしくは、以下のやり方もある
プルリクエストを行うと github
上では、 pr/{連番}/head
と pr/{連番}/merge
というブランチが作られるためそれを使用する
$ git fetch {リモート名} '+refs/pull/*:refs/remotes/pr/*'
* [new ref] refs/pull/9/head -> pull/1/head
* [new ref] refs/pull/9/merge -> pull/1/merge
* [new ref] refs/pull/10/head -> pull/10/head
... (abbrev)
# 例. プルリクエスト 10 を持ってくる場合
$ git checkout -b {new ブランチ名} pull/10/head
プルリクエスト後に追加でコミットされたものを取得する場合は以下を行う
※コンフリクト修正のために force push している可能性があるため --rebase
を指定
# 例. ブランチ sample_branch を持ってくる場合
$ git pull origin sample_branch --rebase
master ブランチ以外を削除する
git branch | grep -v master | xargs git branch -D
master および develop ブランチ以外を削除する
git branch | grep -v "master\|develop" | xargs git branch -D
特定のコミットをマージする
- git log を実行して merge する対象のコミット番号を控える
※★で囲まれた部分 - git cherry-pick {1 で控えたコミット番号}
マージコミットを revert する
- git log を実行して revert する対象のコミット番号を控える
【以下、例】
commit 2c5f38104b1b1896d82b3eca80b9ce39ce1548cd
- git revert -m 1 {1 で控えたコミット番号}
-m の後ろの数字はどちらを正とするかを表している
※main branch を正にする場合は 1
another_branch を正にする場合は 2 を指定
【以下、例】
commit 341058af5e0d673e15fe8a14111e7c759191bd9f (origin/revert_commit, revert_sample)
Merge: 5c863c9 9828ee6 ← 5c863c9: 1(revert_sample), 9828ee6: 2(another_branch)
- git log -p で差戻の内容が正しいことを確認
- git push origin revert_sample
タグ追加
$ git tag -a {タグ名} -m "{コメント}"
$ git tag で確認
$ git show {タグ名} で確認
$ git push origin {タグ名}
Author 修正
$ git commit --amend --author="{ユーザ名}"
$ git rebase --continue
$ git log --pretty=full
すでにプッシュしている場合は -f
が必要になる
$ git push origin hoge
Git ブランチ切り替え時の注意点
git checkout
コマンドを使用すると移動元のブランチの修正を引き継いで切り替えを行う
上記のため、git status
コマンドで差分として上がらず github
に上げた際に不要なソースが混じってしまう可能性があるため注意する
対策としては以下のようにチェックアウト元を指定して新規でブランチを作成する
git checkout -b {作成するブランチ名} {チェックアウト元ブランチ名}