web-dev-qa-db-ja.com

すでにコミットされたファイルを失うことなくリセット

誤ってファイルを間違ったブランチにコミットした場合、通常はgit reset --hard HEAD~1を使用します。ただし、この方法を使用すると、通常、コミットされたすべてのファイルが失われます。編集したファイルを失うことなく、コミットをリセットする方法はありますか?

19
cherrun

使用禁止 --hard 使用する --soft代わりに。

したがって、最新のコミットを削除したい場合は、次のようにします。

git reset --soft HEAD^

36
Alex

アレックスは非常に正しいですが、私は別のシーケンスを試してみたいと思うかもしれません:

まだ生まれていないブランチでコミットしたい場合:

git branch newbranch
git reset --hard HEAD^

既存のブランチでコミットしたい場合:

git checkout otherbranch
git cherry-pick firstbranch
git checkout firstbranch
git reset --hard HEAD^

アレックスの答えの完全な例

git reset --soft HEAD^
git checkout otherbranch
git commit -am "Message"

競合が原因で他のブランチへの変更を「フロート」しようとして失敗した場合、最後の例はうまく失敗しないことに注意してください。次に、競合を解決するには、スタッシュ/チェックアウト/適用する必要があります。

5
Seth Robertson

私の場合、私は代わりに--mixedを使用することを好みます この簡単な説明

git reset --mixed HEAD^
0