未分類

git add -pで変更を選択してステージングする方法 備忘録

Git for Web Developersという書籍のp114に記載されているgit add -pコマンドの練習をしたのでまとめておく。

まず、以下のファイルp114.htmlをaddして、commitしておく。

続いて、li要素とdiv要素を加えて、ファイルを保存する。

このとき、li要素の変更のみをステージングさせたいので、git add -pコマンドにて、変更箇所を選択する。

このとき、ステージングさせる変更箇所はエディタを開いて自分で選択する。

eキーを入力してエンターすると、以下のようにエディタが開く。

ここで、11行目以下のクイックガイドの日本語訳はこちら。

# '-'行を削除するには、それらを ''行(コンテキスト)にします。
#「+」行を削除するには、削除します。
##で始まる行は削除されます。
#
#パッチが正常に適用されると、編集されたハンクはすぐにステージング用にマークされます。
#正しく適用されない場合は、再度編集する機会が与えられます。ハンクのすべての行が削除されると、編集は中止され、ハンクは変更されません。

 

ということで、+行を削除するには、それらの行を削除すればいいので、以下のようにhelpのli要素を残して、divを削除する。

ところが、これで保存して終了すると、以下のようにerrorが発生して、hunkの変更が反映されない。

何度かチャレンジするも、うまくいかず。

エディタでの編集に失敗したので、sキーを選択し、gitに変更を自動で分割してもらう。

そして、helpのli要素のみをステージングさせ、div要素はステージングさせない。

これでli要素の変更のみをステージングできた。

続いて、最新のコミットとインデックスとの差分を確認する。

git diff –cached

helpのリスト要素のみがステージングされていて、それが最新コミットとの差分になっているので、このままコミットする。

ここで、念の為に最新のコミットと作業ツリーとの差分も確認しておく。

git diff HEAD

helpメニューの追加をコミットしたので、次はdiv要素をステージングさせて、コミットさせてやればいい。

 

最後に、div要素の変更をステージングさせて、コミットすることで、作業ツリーに加えたすべての変更をコミットすることができた。

エディタでのhunk指定に失敗した原因がよくわからないが、とりあえず変更を分割してステージングできたのでよしとする。

ただ、今後は適切な粒度でステージングとコミットを行い、git操作で詰まるのを避けたいところ。