簡體   English   中英

使用 Github Revert Button 恢復 PR 后如何再次 PR 和合並

[英]How to PR and merge again after reverting PR using Github Revert Button

基本上我使用Github 恢復按鈕功能分支的先前 PR 恢復到master ,然后我決定合並我之前恢復的相同功能分支,但我無法這樣做。 步驟如下:

  1. PR 將功能分支合並到master
  2. 從( master )恢復 PR 合並
  3. 嘗試創建新 PR 以再次將功能分支合並到master
  4. 收到這條消息:

沒有什么可以比較的。

master 與來自 feature-branch 的所有提交保持同步。 嘗試切換基准進行比較。

關於如何將功能分支再次合並到master分支的任何建議

只需還原還原即可。 因此,通過單擊還原按鈕,您將創建一個新的 PR(您的第 2 步)。 合並后,您可以選擇還原它,這將創建一個包含所有更改的新分支。然后您可以拉取它,對其進行更改(如果需要)並創建一個新的 PR。 您將丟失 Github 上的所有提交消息,但所有文件更改仍然存在。 很高興參考您的原始分支並在新的 PR 中恢復。

任何避免復雜的 rebase 或強制推送到 master 的東西。

我寫這個答案是因為我遇到了這個問題,我發現這里的答案更具理論性而不是實踐性。 我多瀏覽了一點,找到了解決這個問題的方法。 您可以在此處的文章中找到更詳細的答案。

為了解決這個問題,你必須創建一個新的分支來跟蹤 master 並恢復 revert commit 然后結帳到功能分支並合並新分支。 現在你可以解決沖突(如果有的話),提交並創建一個新的 PR。

以下是命令:

# do the needed changes in the feature branch
$ git commit -m "fixed issues in feature-branch'

# create new branch tracking master branch
$ git checkout -b revert-the-revert-branch -t master

# revert the reversion commit
# find it from your git log
# in linux try: 'git log | grep revert -A 5 -B 5'
$ git revert <revert-commit-hash>

# checkout the original feature branch
$ git checkout feature-branch

# merge the revert branch
$ git merge revert-the-revert-branch

# handle merge conflicts and commit and PR

我知道這很舊,但如果有人需要一個好的答案,請點擊此處:

在合並 PR 並刪除分支並稍后還原此合並后,您可以創建一個新分支,然后還原還原。 將其推送到遠程倉庫並創建一個新的 PR。

這將創建一個新的 PR,其中包含一個名為“revert "revert #123 blabla"”的提交,其中包含您對 diff 的所有更改。

https://www.tildedave.com/2012/11/24/reverting-a-github-pull-request.html

什么

您應該拉取最新的 master,將您的分支重新建立在 master 上,然后您應該能夠發出另一個拉取請求。


為什么

您不能自動合並回的原因是因為分支的基礎與主分支的 HEAD 不同步。

恢復 Revert 可能會變得混亂,有時缺乏透明度。

此外,還原還原將阻止具有此代碼的其他分支正確合並。

假設您在 master 上有特征 x 並合並到分支 y 中。 那么你決定 master 不應該有特征 x 合並,因為它取決於分支 y。 所以,你恢復了主人。 當您嘗試合並分支 x 時,git-merge 命令會看到原始合並,並高興地宣布一切正常並且分支已經合並,即使您希望它們與分支 y 合並,也省略了對功能 x 的這些提交。

  1. 轉到 Revert PR 並單擊“Revert”(但不要合並它)
  2. git fetch
  3. Do git checkout <name of revert's revert>

您的所有更改都會在那里,當您創建 PR 時,這些更改就會顯示出來。

需要明確的是——點擊 Revert PR 上的“Revert”會給你一個像revert-202-revert-201-originalbranchname這樣的名字。 這是您要編輯的分支!

這是我所做的。

  1. 簽出您的功能分支

  2. 使用您的基本分支重新綁定:這將使您的功能分支進入基本分支的狀態,因為您的功能分支提交已經是基本分支的一部分。 您的功能分支提交將在您的恢復 PR 提交下方對齊。

  3. 然后恢復恢復 PR 的提交。 這將使您的功能分支恢復到其原始狀態,但現在有了新的提交。

  4. 推送到功能分支,然后提出 PR。

為什么這有效? 通過變基,您可以使您的功能分支與基礎分支同步,即使其與基礎提交相同的提交 - 需要在基礎之前移動並獲得將您的更改恢復到您的功能分支的提交

通過恢復,您可以撤消刪除您的更改的更改,現在您的更改可以成為基於分支的新提交 AHEAD 的一部分。

  1. 切換到 master 分支並打印出提交日志git log 在這里搜索為 PR 所做的提交並復制提交哈希代碼。
  2. 現在運行git cherry-pick YOUR_HASH_CODE 這將使您的特定承諾成為首要任務。
  3. 現在創建一個新分支並切換到這個新創建的分支並將其推送到 git。
  4. 現在從這個新創建的分支創建一個 PR 來掌握。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM