web-dev-qa-db-ja.com

最後のコミット/マージを元に戻す

私はgit repoを少し台無しにしています。別のブランチの機能に取り組みました。仕事を終えた後、私はそれをマージするためにマスターに切り替えました、しかし私のパートナーは私のと衝突するようになったいくつかのファイルをプッシュしました。マージ、競合、新しい変更のプッシュの後、パートナーの古い変更もコミットしたことがわかりました。

このコミット/マージをやり直したい。私は試した git reset --soft HEAD^ですが、プッシュしたいときにこのエラーメッセージが表示されましたMerge the remote changes before pushing again

誰か助けてもらえますか?

27
Siggy Petersen

あなたの機能ブランチはまだあなたの仕事を指しています。これらの変更は失われません。

プレイズが言ったように、あなたはマスターを1つにリセットすることができます

git reset --hard HEAD^

マージせずにブランチから特定のファイルを取得したい場合は、それらをチェックアウトできます。

git checkout yourbranch -- file1 file2 etc

マージ前のマスターからいくつかのファイルが必要な場合は、これらをチェックアウトすることもできます。

git checkout master^ -- file3 file4 etc

これは理想的ではありませんが、必要な場合もあります。/may /マージは、マージのどちらかの側からの変更を拒否することを意味します。適切なマージを実現する最良の方法は、次のとおりです。

git merge --no-commit yourbranch

マスターから、上からgit checkoutコマンドを実行し、最後にコミットします:

git add . -A
git commit

ここでこのブランチをプッシュするとき、forceオプションを追加する必要があります

git Push --force

または

git Push -f

お役に立てれば。

36
Adam Dymitruk

へへ、あなたはほとんどそれを理解しました:

git reset --hard HEAD^
10
plaes

ここでの問題は、すでに中央リポジトリにプッシュした変更を元に戻したいということです。そもそもそれらをプッシュしていなかった場合は、git reset --hard /-soft /-mixed HEAD ^がうまく機能します。

したがって、HEADをリセットすると、オリジンにプッシュして、HEADの祖先ではないリモート参照を更新しようとすると、gitが文句を言います。--forceを使用します。

git Push --force Origin master
10
ralphtheninja