21

ジュニアgitユーザーとして、私は厳しいマージに圧倒され、何か間違ったことをしたに違いありません。結局、ソースファイル内のごみの混乱で競合解決をコミットすることになりました。<<<<<<< HEADコミットは、とのように見える多くの行の追加を示しています>>>>>>> a7b4de79431c2e73d28621c72c8d14820df1a24b。コミットはすでにリモートオリジンにプッシュされているので、残念ながらコミットを修正することはできません。

4a3ba7b0e56cf0be80274c1f879029220a889bdeリモートリポジトリを最後の適切なコミットに巻き戻し、 (可能であれば)不正なコミットを破棄したいと思いますd004651972cbc35f70ee5a2145b6e03169c77279

私は試した:

git checkout 4a3ba7
git push -f

そして得た:fatal: You are not currently on a branch.

4

3 に答える 3

28

checkout現在の作業ディレクトリを前のコミットに移動しますが、ブランチの内容は変更されません。ブランチをリセットして古いコミットに戻し、それをプッシュする必要があります。

git checkout ...
git reset --hard 4a3ba7
git push -f

とはいえ、すでにpush -f最新のコミットのみを変更する場合は、を使用できるはずです--amend

git checkout ...
// Fix the file
git commit --amend
git push -f

後でコミットしたい変更が少なくともいくつかある場合は、次の4a3ba7ようにすることもできます。

git checkout ...
git reset 4a3ba7
git add -p
// Use the interactive prompt to choose the parts you want
git commit
git push -f

アップデート

エラーremote: error: denying non-fast-forward refs/heads/masterは、使用しているgitサーバーであるAssemblaがデフォルトで履歴の書き換えを許可していないためです。その部分を修正するには、この回答を参照してください:Assemblaへのgitpushを元に戻します

于 2013-02-18T00:34:43.780 に答える
13

リモートブランチを巻き戻すためにローカルでチェックアウトする必要はありません。あなたはただ使うことができます

git push -f origin 4a3ba7b0:master

もちろん、このプッシュリモートデータを上書きするため、何かを行う前にログを再確認してください。

権限エラーを受け取った場合は、リモートリポジトリでreceive.denyNonFastForwardsに設定されている可能性があります。trueいずれにせよ巻き戻しを機能させるには、これを変更する必要があります。

于 2013-02-18T00:51:42.303 に答える
3

あなたはすることができます

git reset --hard *commithash* 

ただし、注意してください。これにより、変更されたデータが失われる可能性があります。(警告されています:))

于 2013-02-18T00:35:39.757 に答える