6

devブランチ(一定の、時には不安定な変更を伴う)をmasterブランチ(リリースされた安定したコードを格納する場所)にマージしました。マスターブランチを、devブランチとのマージが発生しなかったような以前の状態に復元したいと思います(将来、devブランチをマージするときに、今破棄するすべての変更が「再度」マージされます)。

これはマスターブランチの現在のステータスであり、HEADに「professional-1.1.2」コミット/タグを付けたいと思います。

マスターブランチのステータス

私は試した:

$ git revert -n professional-1.1.2..HEAD
fatal: Commit 9167e846a387c793edbc089c7ab6bd9eb8260456 is a merge but no -m option was given.
$ git revert -n -m 1 professional-1.1.2..HEAD
fatal: Mainline was specified but commit 380169097f35d07466640bc0db1b639278cd25fa is not a merge.
$ git revert -n -m 2 professional-1.1.2..HEAD
fatal: Mainline was specified but commit 380169097f35d07466640bc0db1b639278cd25fa is not a merge.

少し調べてみると、Gitの答えとして、早送りを無視して元の[ブランチ]を以前のコミットに戻す方法git reset --hard professional-1.1.2が良いと思います。またはpush'dgitcommitを元に戻します。他の開発者は同じオフィスにいて、マスターに何もコミットしてはいけません(私もそうすべきではありませんが...ええ、ブランチごとの権限はありません)ので、彼らに伝えて何かをすることは大きな問題ではありませんアクションが必要です。git push --force

したがって、最終的に問題は次のとおりです。git revert somethingまたはgit reset --hard <TAG>&& git push --force?の場合git revert、どのコマンドラインを使用する必要がありますか?

4

3 に答える 3

6

masterの状態をとまったく同じにしたい場合はprofessional-1.1.2、履歴の書き換えや強制プッシュを避けながら、プロジェクトの同じ状態を表す新しいコミットをマスターの上に作成できますprofessional-1.1.2。次の手順でそれを行うことができます。

# Check that "git status" is clean, since the steps that follow will throw
# way uncommitted changes:
git status

# Set the index (staging area) to be as it was at professional-1.1.2:
git read-tree professional-1.1.2

# Create a commit based on that index:
git commit -m "Reverting to the state at professional-1.1.2"

# Your working tree will still be as it was when you started, so
# you'll want to reset that to the new commit:
git reset --hard

別の方法として、 Charles Baileyがこの回答で提案した手順に従うこともできます。これは同じことを実現しますが、少し混乱します(私が提案した手順には「配管」コマンドが含まれますがgit read-tree)。

于 2012-04-26T10:08:45.180 に答える
6

この-m numberオプションは、どの親に戻すかを指定します(マージには複数の親があるため)。

だからあなたは望むgit revert -m 1 HEADgit revert -m 1 SHA_OF_MERGE_COMMIT(あなたがしたと仮定してgit checkout master; git merge devel;

于 2012-04-26T09:54:30.333 に答える
2

あなたが大胆不敵な場合(他のすべてのコミッターには、上流のリベースからの回復が必要になる可能性があります)

git checkout yourbranch
git reset HEAD <commit-hash>
git push origin yourbranch -f
于 2012-04-27T09:47:10.627 に答える