以前のコミットにファイルを追加するにはどうすればよいですか?


84

過去1時間ほどで、ファイルを変更しました

A
ATest
B
BTest

コミットメッセージが実際の変更と一致していることを確認するためにA、説明を付けてコミットします。残念ながら、私はATestそのコミットに含まれていません。

その間、まだコミットされていませんBBTest

この時点で続行するための最良の方法は何ですか?私はどちらかをしたい:

  1. 現在コミットされていないファイルに影響を与えることなく、以前のコミットを元に戻しますか?
  2. 前のコミットに同じ説明で別のファイルを追加しますか?

2が通常の方法だと思います。それについての問題は何ですか?
エイドリアンシャム2012

回答:


140

前のコミットに新しいファイルを追加するには:

$ git add new-file
$ git commit --amend

git commit --amend --no-editコミットメッセージを変更したくない場合に使用できます。


3
ありがとうございました。好奇心から、コミットのsha1がわかっていて、コミットが「最後」ではなかった場合、そのコミットをどのように修正することができたでしょうか。
James Raitsev 2012

6
@Jam私はそれをしないように本当に一生懸命努力すると思います;-)しかし、必要な場合、1つの方法(それが最善かどうかはわかりません)は、新しいファイルを独自のコミットとしてコミットしてgit rebase -iから、コミットを並べ替えてマージするために使用することです新しいファイルのコミットと他のコミット。それは別の質問の材料かもしれません。
David Z

3
行う場合git rebase -i@DavidZが示唆するように、あなたがしなければならないすべては、新しいあなたがそれを組み合わせるしたいだけの1未満にまでコミット移動し、新しいのにの言葉をコミットする変更であるsquash代わりにpick
MM

たくさんのファイルをステージングしたが、修正されたコミットに1つだけ追加したい場合はどうなりますか?
dfrankow 2015

ステージングされたすべてのファイル(たとえばgit reset)のステージングを解除してから、追加するファイルをステージングし、コミットを修正してから、すべてのファイルを再度ステージングします。
William Pursell 2015


12

前のコミットにファイルを追加する

作業中のブランチをすでにプッシュしている場合は、最初にmanページを参照してください。特に、次の点に注意してください。

他の人が作業に基づいているブランチをリベース(または他の形式の書き換え)することは悪い考えです。その下流にいる人は、手動で履歴を修正する必要があります。

ただし、ブランチをプッシュしていない場合は、危険ゾーンに入る準備をしてください。

コミットハッシュを見つける

まず、追加するコミットのコミットハッシュを知る必要があります。これはで示されgit logます。実際には、追加するコミットのにコミットを指定する必要があります。(変更するコミットのスライスへの開始インデックスと考えることができます。)を実行することで、正しいコミットがあることを確認できますgit log -1 HEAD~n。ここで、「n」は、適切なコミットが行われるまでインクリメントする整数です。または、数えることもできますが、実際にはそうではありません。

ただし、カウントする場合は、少なくともgit log -1 HEAD~5、カウントが何であれ、正しいコミットがあることを確認してください。追加したいコミットが表示されないはずです。

危険、へぇ

これで、を実行する準備が整いましたgit rebase -i HEAD~5。または、コミットハッシュが何であれ。これにより、お気に入りのテキストエディタと編集するファイルが表示されます。このファイルは、rebaseコマンドのToDoリストです。ファイル内のコメントは、どのようなオプションがあるかを示しています。追加したいコミットのある行を見つけて、その行で「pick」を「edit」に変更するだけです。次に、ファイルを保存して閉じます。

編集するように指示したコミットに達すると、リベースは停止します。を実行して、git status提供される追加情報を確認します。ファイルをステージングしgit add .て、ファイル名が何であれ、コミットに追加します。

次に、を実行しますgit commit --amend。これにより、編集するために選択したコミットが修正されます。

最後に、を実行しgit rebase --continueます。

疑わしい場合は、Linuxで、man git-rebaseまたはによって出力されたドキュメントを読んで詳細を確認できますgit --help rebase


2
「コミットハッシュを探す」について。カウントを開始する必要はありません。を使用git logしてコミットを見つけ、そのハッシュをコピーしてgit rebase -i hash^から、を使用して前のコミットに基づいてリベースします。
ヴィクトル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.