2017-04-16 9 views
0

シナリオ:最後の2つのコミットは不正であり、削除する必要があります(ローカルおよびリモート)。ワーキングツリーは、現在の変更を上書きするHEAD〜2に戻って来なければなりません。また、私がブランチで働いている唯一の人だと仮定して、リモートコミットを削除しても構いません。発散支店のプッシュを強制するための推奨構文は(2017年4月現在)です:2つ前のコミットを削除し、ローカルの変更を破棄し、リセットします。-hard vs checkout

git checkout HEAD~2 
git push origin +HEAD 

Question2対

git reset --hard HEAD~2 
git push origin +HEAD 

の違いは何ですか?

git push origin +HEAD 
vs 
git push origin MyBranchName --force 

答えて

1

git checkout HEAD~2は、過去にコミット一定で(作業ディレクトリを取り込むことで)それがあったか見に行くためではなく、歴史を変更せずにです。あなたは今それが分離ヘッド状態です(それについては、それをどのように扱うかを知っておくと便利です)。

git reset --hard HEAD~2あなたが何を望み、何を望みますか?

git push origin --force-with-leaseです。 これは '--force'と同じですが、あなたが見たことのない他の人がヒストリプッシュを破壊しないという追加の検証があります(あなたがまだフェッチしていない履歴を上書きすることはできません)。これは確かに行く方法であり、あなたが '--force'を行うときのデフォルトであったはずですが、そうでない場合は確かに互換性があります...

+0

'checkout'コマンドは混乱します。場合によっては、変更を破棄するために使用する必要があります。たとえば、次のようにします。myFilenameを最新のコミットから戻します: 'git checkout HEAD - myFilename'。しかし 'git reset -hard HEAD-myFilename'は間違っています(致命的:パスでハードリセットできません) – Polymerase

関連する問題