web-dev-qa-db-ja.com

GitHub.comの保護されたブランチからのマージコミットを元に戻す

GitHubの開発ブランチを保護し、ダウンストリームの誰もコミットを直接プッシュできないようにしました。コミットは特定の機能ブランチを通過し、プルリクエストを介してマージされる必要があります。

機能ブランチが開発ブランチに(適切なレビューと変更の後)マージされ、後で要件を変更する必要がある場合があるというシナリオがありました。マージコミットをダウンストリームに戻そうとすると、ブランチが保護されているため、プッシュできません。ブランチをマージするときにGitHubが元に戻すボタンを提供したことを覚えています。しかし、どういうわけか私は今ボタンを見る(または見つける)ことができません。コミットを優先的に元に戻す必要があったため、当面は開発ブランチから保護を解除し、元に戻すコミットをプッシュしました(最も悪質なハック)。

保護されたブランチからコミットを元に戻すためのより良い代替手段はありますか?たぶん、GitHubのいくつかの機能が見つからないか、誤解されています。

もう1つのシナリオは、マージ後にGitHubからブランチを削除した場合、どうすれば元に戻すことができますか?

14
nak

GitHubで元に戻す

プルリクエストによるマージコミットを元に戻すために、GitHubでブランチを復元(削除解除)する必要はありません。例えば:

Revertable pull request

元に戻せないプルリクエスト

元に戻すボタンが表示されない場合があります。 プルリクエストの取り消し のGitHubヘルプから:

注:次の場合、Gitを使用して個々のコミットを手動で元に戻す必要がある場合があります。

  • プルリクエストを元に戻すと、マージの競合が発生します
  • 元のプルリクエストは元々GitHubでマージされていません(たとえば、コマンドラインで早送りマージを使用)

例を見つけるのに時間がかかりましたが、GitHubの大きな緑色のボタンを使用してヘッドブランチをベースブランチにマージしなかった場合、GitHubで元に戻すことはできません。

Non-revertable pull request

git revert

コマンドラインでローカルに、 git revert コマンドを使用して変更を元に戻すことができます。

これは、保護されたブランチとダウンストリームブランチの両方で機能します。 git revertは現在のHEADの前に新しいコミットを作成するため、Pushを強制する必要はありません。ダウンストリームブランチからの場合は、元に戻す変更のプルリクエストを手動で作成できます。

マージコミットを元に戻すことは、単一の親のコミットを元に戻すことよりも少し複雑です。詳細については、 この質問 をご覧になることをお勧めします。

人々がコマンドラインを使用することに不安がある場合、 SourceTree にはコミットを元に戻すためのコンテキストメニューの項目があると思いますが、マージコミットの処理方法がわかりません。他のGUIアプリケーションにも同様のオプションがあります。

お役に立てれば!

7