37

私は私のgitレポを少し台無しにしました。別のブランチの機能に取り組みました。作業を終えた後、マージするためにマスターに切り替えましたが、パートナーがいくつかのファイルをプッシュし、私のものと競合しました。マージ、競合、および新しい変更のプッシュの後、パートナーの古い変更もコミットしたことがわかりました。

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

誰でも私を助けることができますか?

4

4 に答える 4

55

機能ブランチは引き続き作業を指します。これらの変更は失われません。

plaes が言ったように、マスターを 1 つにリセットすることができます

git reset --hard HEAD^

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

git checkout yourbranch -- file1 file2 etc

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

git checkout master^ -- file3 file4 etc

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

git merge --no-commit yourbranch

master から、次に上から git checkout コマンドを実行し、最後にコミットします。

git add . -A
git commit

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

git push --force

また

git push -f

お役に立てれば。

于 2011-04-11T18:43:59.403 に答える
15

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

git reset --hard HEAD^
于 2011-04-11T15:04:53.637 に答える
10

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

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

git push --force origin master
于 2011-05-01T13:25:21.690 に答える