個人用メモです。
Gitでコミットをクリーンにする方法
##git status
まずはgit status
でgitの状態を確認する。
$ git status
On branch xxx
Your branch is up to date with 'origin/xxx'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
(commit or discard the untracked or modified content in submodules)
modified: frontend (new commits, modified content)
no changes added to commit (use "git add" and/or "git commit -a")
▼未対応部分
ステージしていないファイルが存在している。
Changes not staged for commit:
modified: frontend (new commits, modified content)
##git diff ステージに追加する前に`git diff`で変更内容を確認する。
コマンド | 内容 |
---|---|
git diff | ステージ前のファイル差分確認 |
git diff --cached | コミット前のファイル差分確認 |
$ git diff
diff --git a/frontend b/frontend
--- a/frontend
+++ b/frontend
@@ -1 +1 @@
-Subproject commit 228a7ffc18770d1aff28a46c7bb45057ee3d9fe5
+Subproject commit 228a7ffc18770d1aff28a46c7bb45057ee3d9fe5-dirty
Subproject
とあるので、サブモジュールのあるディレクトリに移動してからgit diff
する必要がある。
##サブモジュールでgit diff ディレクトリを移動し内容を確認
$ cd frontend/
$ git diff
diff --git a/components/table.vue b/components/article/table.vue
index fb8185e..0e6fc28 100644
--- a/components/article/table.vue
+++ b/components/article/table.vue
@@ -171,10 +171,10 @@ export default {
+ //ドラッグ選択処理
endCell(){
this.selectedCells = []
- // 基点となるrowとcol
const startCell = this.startCell
コメントアウトを変更(追加と削除)したのみ。特に重要ではないので、今回はこのステージ前の変更を削除する。
##git checkout .
ステージ前の変更を消して、クリーンなコミットの状態にする。
・git checkout <パス>
HEADを指定したパスに移動する。
ドット(.)を指定した場合、最新のコミットに戻る。
$ git checkout .
Updated 1 path from the index
##ステータスの確認 ルートディレクトリに戻って`git status`で状況を確認する。
$ cd ..
$ git status
On branch xxx
Your branch and 'origin/xxx' have diverged,
and have 181 and 3 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
nothing to commit, working tree clean
。これで、gitがクリーンになった。
##git reset と git checkoutの違い 以下はどちらも最新のコミットに自分のHEADを移動する。(直近の変更を取り消す)
git reset --hard HEAD
git checkout .
コミット番号SHAを指定すれば、そのコミットまで戻れる。
git reset --hard 8b3e55e5
git checkout 8b3e55e5
###違い
両者の違いは、reset --hard
は指定したコミット以降の履歴はすべて削除する。
checkout
はHEADの位置を移動するだけで、以降のコミットは残った状態になる。