ローカルコピーがそのコミットで行われた変更を保持するようにコミットを元に戻す方法はありますが、作業コピーではコミットされていない変更になりますか?コミットをロールバックすると、前のコミットに戻ります-変更を加えたままにしたいのですが、間違ったブランチにコミットしました。
これはプッシュされておらず、コミットされているだけです。
ローカルコピーがそのコミットで行われた変更を保持するようにコミットを元に戻す方法はありますが、作業コピーではコミットされていない変更になりますか?コミットをロールバックすると、前のコミットに戻ります-変更を加えたままにしたいのですが、間違ったブランチにコミットしました。
これはプッシュされておらず、コミットされているだけです。
回答:
これを行う方法はたくさんあります。例えば:
まだコミットを公にプッシュしていない場合:
git reset HEAD~1 --soft
それだけです。コミットの変更は作業ディレクトリにありますが、LASTコミットは現在のブランチから削除されます。git reset manを参照してください
場合は、あなたはやった(「マスター」と呼ばれるブランチ上)公にプッシュ:
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
reset
述べたコマンドは、ヘッドの前の「ソフトに」1 revにリセットすることで、ローカルの変更をすべて保持しています。これは、SourceTreeで使用するためにすぐにはわかりませんでした。リセットしようとしているリビジョンではなく、以前のリビジョンにソフトリセットしていることを確認してください
"Already up to date"
。マージを実行すると表示されます。
変更をプッシュした場合、それを行うundo
ことができ、別のブランチを使用せずにファイルをステージに戻します。
git show HEAD > patch
git revert HEAD
git apply patch
最後のブランチの変更を含むパッチファイルを作成します。次に、変更を元に戻します。最後に、パッチファイルを作業ツリーに適用します。
rm patch
ん
ケース:「これはプッシュされていません。コミットのみです。」-IntelliJ(または別のJetBrains IDE)を使用していて、まだ変更をプッシュしていない場合は、次に行うことができます。
できました。
これにより、変更が「コミット解除」され、gitステータスが最後のローカルコミットの前の状態に戻ります。行った変更は失われません。
git reset --soft "HEAD^"
、Windows の場合と同じです。:)
私の場合、ほとんどの場合、変更を間違ったブランチにプッシュして、後で気づくと発生します。ほとんどの場合、以下の作業を行います。
git revert commit-hash
git push
git checkout my-other-branch
git revert revert-commit-hash
git push