2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

Gitのコマンドは反応で叩くことができるのが理想ですが、VSCodeの左上をぽちぽちしてしまったり、都度調べてしまったりすることが多々あるので、この機会にまとめたいと思います。

コミット履歴の確認

  % git log

差分の確認

ステージングしていない差分(working treeとindexとの差分)

  % git diff

ステージングしている差分(indexと最新のcommitとの差分)

  % git diff --staged
  % git diff --cached

commit間の差分

  % git diff commit_1 commit_2

リモートリポジトリとの差分

  % git diff origin/development
  • developmentブランチですでにpushしていると仮定しています。
  • リモートリポジトリと書きましたが、pushした時点でそのbranch(ポインタ)が指していたcommitとの差分になります。
    • 他の人が同じリモートのブランチにcommitを追加している場合は、git pullして差分を取る必要があります。

ステージング

カレントディレクトリ配下をステージング

  % git add .

特定のファイルを部分的にステージング

  % git add -p path

untrackedなファイルを部分的にステージング

  % git add -N untracked_file
  % git add -p untracked_file

ステージングの取り消し

HEADが存在しない時(初回commitが終わっていない)

  % git rm --cached path

HEADが存在している時

  % git reset HEAD path

コミット

普通にコミット

  % git commit -m "Commit message"

修正用のコミット

  % git commit --fixup commit
  • 特定のcommitに修正を加えたcommitを作りたい時に使います。
    • レビューをいただいた際によく使います。
  • コミットメッセージは、対象のコミットのコミットメッセージの先頭にfixup!が付いたものになります。
  • fixupしたcommitの差分は対象のcommitに含めることができます。

commit取り消し

  % git reset HEAD~ --soft
  • indexもworking treeもリセットすることなく、HEAD~の位置まで戻ります。
  • commitを打つ直前の状態になります。
  % git reset HEAD~
  % git reset HEAD~ --hard
  • indexもworking treeも共にリセットし、HEAD~の位置まで戻ります。
  • HEAD~以降の変更差分が全てなくなります。(untrackedなファイルは残ります。)

「commitを取り消した」という履歴を残してcommit取り消し

  % git revert HEAD
  • コミットメッセージは、対象のコミットのコミットメッセージの先頭にRevertが付いたものになります。
  • そのcommitに対してrevertをするとRevertのRevertになるので元に戻すことができます。

修正・整理

直前のコミットメッセージの修正

  % git commit --amend

特定のコミットメッセージの修正

  % git rebase -i commit

コミットをまとめる

  %  git rebase -i commit
  • 上記と同様ですが、commitをまとめる場合はsもしくはsquashで書き換えます。
  • squashを指定したcommitは直前のcommitに取り込まれます。

最新のmain(master)の差分を取り込む

  % git checkout main
  % git pull origin main
  % git checkout development
  % git rebase main
  • mergeよりもrebaseの方が履歴が綺麗になるので、rebaseを使っています。
  • この場合、リモートにpushする際にはfast-forwardではなくなっているので、force pushが必要になります。

特定のcommitを適用させたい

  % git cherry-pick commit
  • 特定のコミットだけを現在のブランチに追加したい場合に使います。

検索

  % git grep "target_word"

コミットせずに一時的に差分を退避

  • コミットよりも削除難易度が低いので、個人的にはwipなどのコミットメッセージをつけてcommitしてしまった方がいいと思います。
  • 「消しちゃった〜」となることが結構あります。

普通に退避

  % git stash

名前をつけて退避

  % git stash save stash_message

untrackedなファイルもまとめて退避

  % git stash -u
  % git stash save -u stash_message # 名前付き

退避した差分を展開する

  % git stash pop
  % git stash apply stash@{0}
  • stashはstack構造で管理されているのでpopをした場合、1番最後にstashした差分が展開されます。
    • stackの状態は% git stash listで確認することができます。
  • popの場合、差分の展開とともにstackからは削除されますが、applyの場合はstackに残り続けます。

退避した差分を削除する

  % git stash drop stash@{0}
  • 展開することなく削除します。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?