Gitで編集したファイルの1部分だけをコミットする方法

Advertisement

Gitで編集したファイルの1部分だけを個別にコミットする方法があるの知ってました?

僕は最近知ったんですが、ファイルをステージする際にパッチ(–patch)というオプションがあって、かなり柔軟な操作が可能です。この機能を使うと、たとえばA、B、Cという3つの変更箇所があったとして、まずはAとCをステージしてコミットして、その後、Bをコミットするといったことができちゃいます。便利ですね🤩

ということで、忘れないうちにやり方をメモっておきます。

Gitのステージのパッチオプションの使い方

git addでファイルをステージするときに、-pまたは--patchオプションを使います。

git add -p <ファイル名>

このコマンドを打つと、指定したファイルに加えられた変更が順に表示されて、表示された変更部分(hunkと呼ぶ)をステージするかを聞かれます。

(1/3) Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]?

あとはynでステージする部分を選ぶだけです。操作を中止する場合はqを押します。

他にもいろいろオプションがあって、かなり柔軟にステージする部分を選択できます。その他の操作に書いたように、このコマンドを使ってステージした部分を確認したりやり直しもできるので、覚えておくと便利です。

キー 操作
y 表示されたhunkをステージする
n 表示されたhunkをステージしない
q 表示されたhunkと残りのhunkをステージせずに操作を中止する
a 表示されたhunkと残りすべてのhunkをステージする
d 表示されたhunkと残りのhunkをステージしない
j 表示されたhunkを未決定のままにして次の未決定のhunkを表示する
j 表示されたhunkを未決定のままにして次のhunkを表示する
k 表示されたhunkを未決定のままの状態で前の未決定のhunkを表示する
K 表示されたhunkを未決定のままの状態で前のhunkを表示する
g 表示するhunkを選ぶ
/ regexでhunkを検索する
s 表示されたhunkをより細かく分割する
e 表示されたhunkを編集する
? ヘルプを表示する

その他の操作

ステージした部分の確認

git diff --staged

ステージした部分の再編集

git reset -p

このコマンドを打つと、以下のように聞かれてステージから外す部分を選べます。

(1/2) Unstage this hunk [y,n,q,a,d,j,J,g,/,e,?]?

以上、Gitで編集したファイルの1部だけをコミットする方法でした!

About the author

Rriverのステッカーが貼られたMacBookの向こうにいる自分のMemojiの似顔絵

「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら

ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net Twitter @rriver 、またはFacebook までご連絡ください。