Git/操作/commit

Stage

コミット対象となる変更を登録する処理。 この後に commit することでリビジョンとして確定させる。

ファイル指定でステージング

$ git add hoge.txt

対象のファイルの一部だけステージング

Git では対象のファイルの一部分だけステージングすることができる。

$ git add -p hoge.txt

起動すると変更の差分の塊(Git では humk と呼ぶ)単位でステージングするか聞いてくるので、y でステージング n でスキップできる。

対話的にステージングする

$ git add -i

便利そうな機能ではあるが、操作性が最悪で tig の代わりになるようなモノではない

ワークに変更がある状態でこれを実行するとこのような表示になる

$ git add -i
           staged     unstaged path
  1:    unchanged        +1/-0 f1.txt
  2:    unchanged        +1/-0 f2.txt

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>

ここでの操作体系は

  • What now> で Command 選ぶ
  • 対象選ぶ
  • 再び対象選ぶ
  • …対象をすべて選ぶまで選び続ける
  • 対象が無い
  • 何も選ばないでエンター
  • 最初に戻る

となっている。

この 表示も Commands もややこしいのだが、staged のカラムに unchanged となっているやつが stage されてないやつということである。

そして stage したいなら update, unstage したいなら revert を選ぶ。ややこしい。 diff は stage されたモノしか差分を見れない

現在のディレクトリ以下全部ステージ

最初の一発目とかに大量に追加する必要がある場合。ドット指定

$ git add .

変更追加削除をステージ

つまり git status で候補のやつを全部ステージ

$ git add -A

思わぬところが変更されている可能性があるのであんまり使わないほうがよいと思う。

インデックス(コミット候補)から削除

つまり、add で追加したファイルをやっぱりやめたする時

$ git reset HEAD hoge.txt

Commit

インデックス内容をローカルにコミット

$ git commit

これでできる。実行すると Editor が起動してログの書き込みを促されるので、書き込んで保存すると commit が完了する。

コミットログを同時にかき込むならこれでもできる

$ git commit -m "hogehoge"

直前のコミットログを修正する

コミットでミスってしまった〜!って時にやるやつ

$ git commit --amend -m 'hogehogehoge'

修正ではなくて削除して再作成になるので、本当にミスった、1秒後にちょっと修正しようという場合にしか使えない

ローカルの実ファイルは削除しないがリモート側のファイルを削除対象にする

$ git rm --cached hogehoge.html

空コミット

$ git commit --allow-empty -m "hogehoge"
vcs/git/ope/commit/start.txt · 最終更新: 2019-09-18 16:31 by ore