1. ホーム
  2. git

[解決済み] 最後にpushされなかったgitコミットを、変更を失うことなくアンコミットする方法

2022-02-09 09:17:06

質問

コミットをリバートして、ローカルコピーの 保つ そのコミットで行われた変更は、私の作業コピーでは非コミットの変更になりますか?コミットをロールバックすると、直前のコミットに戻ります。変更を保持したいのですが、間違ったブランチにコミットしてしまいました。

これはプッシュされておらず、コミットされているだけです。

解決方法は?

例えば、いろいろな方法があります。

がある場合 ない はまだコミットを公にプッシュしていません。

git reset HEAD~1 --soft   

これで、コミットによる変更は作業ディレクトリに保存され、一方最後のコミットは現在のブランチから削除されます。参照 git reset man


万が一 した を公開('master' というブランチに)してください。

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

普通にコミットを戻してプッシュ

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

この変更を作業コピーのローカル変更として扱いたい場合 ("そのコミットでの変更をローカルコピーに残す") は、リバートコミットに対して --no-commit オプションで指定します。

git revert --no-commit 86b48ba (hash of the revert commit).

小さな例を工作してみました。 https://github.com/Isantipov/git-revert/commits/master