私はプロジェクトにかなりの変更を加え(マスターではなくリモートブランチで作業していました)、それらをコミットしてBitBucketでプルリクエストを作成し、ブランチをマスターにマージしました。コミット後に変更をプッシュするのを忘れていました。現在、現在のブランチをリモートブランチに切り替えて、マージ前にコミットに戻した後、すべての変更を元に戻し、システム内の別の場所にバックアップしました。私が今やりたいことは、私がやった悪いマージを元に戻すことです。マージをクリックして「リバースコミット」を選択するたびに、次のエラーメッセージが表示されます。
「エラー:コミットはマージですが、-mオプションが指定されていません。
致命的:復帰に失敗しました」
ブランチは次のようになります。
マージを削除し、master(4 behind)
が表示されないような状態にします。
この方法は、履歴の削除に基づいています。
git Push Origin name_of_branch --force
ターミナルに(コマンドを受け入れるためにgit repoユーザー名とパスワードを入力する必要があるかもしれません)更新:ソースツリーの現在のバージョンは強制プッシュをサポートしています。つまり、手順5で説明したコマンドを使用する必要はありません。プッシュ時に表示されるチェックボックスがあり、それは「力」とラベル付けされています。通常は無効になっています。
強制プッシュチェックボックスを有効にする方法:
プッシュするときにそのチェックボックスをオンにして、Originサーバーの間違いも修正します。
これはおそらく最も簡単な方法ですが、履歴の削除に基づいているため、他の人がプロジェクトで作業している場合は、あなたが何をしているのかを全員に知らせて、誰かのgitリポジトリを壊さないようにしてください。
SourceTreeを使用すると、マージコミットを元に戻すのが簡単になりません(少なくともWindows SourceTree 1.5.2.0では)。ただし、マージの取り消しはコマンドラインから簡単に実行できますが、[逆の別のコミットを追加してマージを取り消しますかマージコミットの結果、または単に履歴からマージコミットを完全に削除しますか?
master
ブランチを他の人と共有していない場合、最も簡単なことは、ハードリセットを実行して、履歴からマージコミットを削除することです。ただし、他の人が既にそのマージコミットのコピーを持っている場合は、master
のコピーを書き直したバージョンと再同期しようとするため、追加の作業を作成します。
そのため、使用するオプションを把握する必要があります。コマンドラインを使用して、両方の手順を説明します。
git checkout master
git Push Origin master --force
これにより、Origin/master
のマージコミットがローカルmaster
ブランチの現在の状態で上書きされ、マージコミットが削除されます。
git checkout master
git merge Origin/master
git revert -m 1 HEAD
これにより、ローカルmaster
ブランチがOrigin/master
と同期し、git revert
に1st parentは「メインライン」の親と見なされるべきものであり、他の親コミットからもたらされた変更に関連する逆コミットを作成します。
後で他の親から変更を再度取り込むことにした場合は、作成した復帰コミットを元に戻す別の復帰コミットを追加する必要があります(「復帰の復帰」と呼ばれる手法)。
こちらもご覧ください:
私はコマンドラインなしで別の方法を見つけましたが、少しいですが、仕事をします。
したがって、ロールバックするコミットにハードリセットを行い、プロジェクトフォルダーに移動して(MacのFinderまたはWindowsのエクスプローラーを使用)、フォルダー全体のコピーを作成します。この「コピー」フォルダー内にあるのは、このプロセスの最後になりたいポイントです。
さて...ソースツリーに戻り、Head(リモートへの最新のコミット)をチェックアウトしてから、プロジェクトフォルダーに再度移動します。「」というフォルダーを表示できる必要があるため、非表示フォルダーが表示されることを確認してください。ギット"
現在のプロジェクトから「.git」をすべて削除します。つまり、現在のプロジェクトには「.git」というフォルダ以外は何もないので、「コピー」フォルダに移動して「.git」フォルダ以外をすべてコピーし、コンテンツを貼り付けます。現在のプロジェクト内(「.git」フォルダーがあるプロジェクトのみ)
できたソースツリーに移動し、変更をコミットします。プロジェクトはまさに望んだ場所にあり、すべての変更が削除されます。
終わり。
Obs1:今すぐ「コピー」フォルダを削除して、PCをダーティファイルから削除します。
Obs2:このプロセスはGitから変更を削除しません。コミットはそこにあります。あなたがしているのは、変更を削除してコミットすることです。