簡體   English   中英

撤消 git rebase/merge/commits to pull request

[英]Undo git rebase / merge / commits to pull request

我正在開發一個功能分支,該分支非常不活躍。 最近遠程master分支做了一些改動,所以跑了git checkout master和git pull。 然后,我進入我的功能分支並運行 'git rebase master' 並解決了很多合並沖突和 ':qa!'d' 要求提交消息的 vim 會話。

然后我嘗試推送這個 rebase'd 分支得到 GitHub,它說我的遠程分支與本地分支過時了,所以我用谷歌搜索了這個,所以說先運行 git pull 'featurebranch',再次解決合並沖突,然后然后運行 ​​git push 'featurebranch'。

所以我這樣做了,我現有的這個特性分支有 20 次提交的拉取請求突然躍升到 150+ 次提交。 現在,我真的不知道如何恢復這一切。 如何在功能分支的 PR 中撤消變基、合並和 150 多次提交? 基本上,就好像過去的幾次 git 更改從未發生過一樣。

有沒有辦法做到這一點?

'git reset --hard feature@{24.hours.ago} 會起作用嗎? 然后如何更新PR? 如何“時間旅行”git 存儲庫重新修訂?

更新:我運行 git reflog,在 rebases 之前找到提交 ID 並運行 git reset --hard (ID)。 現在我將在實際的功能分支中執行此操作,如何將重置的分支版本推送到我為它打開的 github PR。 它會刪除從合並/變基中添加的新提交嗎?

我不完全明白你的問題是什么。

如何將重置的分支版本推送到我為它打開的 github PR?

您不能通過命令行進行 PR。 但是如果你已經創建了一個從功能分支到主分支的 PR,你可以git push origin featrue-branch-name

它會刪除從合並/變基中添加的新提交嗎?

不,如果你推送成功,遠程分支應該等於本地分支。 您從本地分支的提交不會被刪除。 但是如果你使用-f ,來自與本地分支不同的遠程分支的提交將被刪除。

將 feat-branch 重新設置為 master 的正常方法是:

git checkout feature-branch-name
# do some edit
git add --all .
git commit -m "update message"
git rebase master
# solve confilcts
git add /path/to/confilcts/file
git rebase --continue
git push origin feature-branch-name
# then click PR(from feat-branch to master) in github

如果推送失敗, git push -f origin feature-branch-name ,強制使遠程分支同步到您的本地分支

暫無
暫無

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

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