2017-05-24 35 views
1

我犯了一個錯誤,當我想要分支出一個特性時,我忘了切換到開發分支並從那裏創建一個新分支......相反,我在另一個特徵分支內創建了一個新分支。當你從錯誤的分支分支出來並有不需要的提交時該怎麼辦?

我只是推我的功能分支,我剛剛完成,並意識到有提交從另一個功能分支(我創建的分支),而做拉請求。

我在這種情況下做了什麼,因爲我現在有一個分支負責從git hub上的另一個功能分支提交?我可以刪除它們嗎?或者對我來說最好的解決方案是什麼?我不是git專家,所以我可能需要幫助我可能需要運行的命令。

謝謝。

+0

你可以看看你的功能分支和'rebase wherever_you_meant_to_branch_from'。刪除遠程,重新推「。 – castis

+0

我該怎麼做,並仍然保持我在我的功能分支中提交的提交? – hugyt7

+0

Rebase切換出您的功能分支所基於的分支。它將倒回你的提交,切換出底層的分支,然後重放你的提交。如果您感到緊張,請將整個項目文件夾複製一份以防萬一。 – castis

回答

1

您可以使用rebase命令來編輯您的提交樹。例如,考慮到你有如下的提交:

* h121j commit A 
* kj13i commit B 
* alk29 unwanted commit 
* a4b2i commit C 

你可以這樣做:git rebase -i a4b2i。它會打開一個編輯器,你將能夠簡單地刪除提交(或者如果你想要的話,標記爲編輯)。

pick alk29 unwanted commit 
pick kj13i commit B 
pick h121j commit A 

# Rebase a4b2i..h121j onto a0220ae (3 commands) 
# 
# Commands: 
... 

所有你需要做的就是刪除行pick alk29 unwanted commit。保存時,刪除的提交行將從提交樹中刪除。

+0

5個字符的字母數字標識符應該是Git縮寫的提交ID嗎?他們不應該是十六進制的嗎? –

+0

是的@DanielH,但他們是無效的,我只是點擊我的鍵盤的鍵:) – rougeth

+0

是否有無論如何我可以做到這一點,不知道提交ID,因爲我有約10提交刪除,它會更容易,只是從一開始就打開這個編輯器? – hugyt7

0

好吧....兩個部分:

1櫻桃挑不需要提交到你真的希望他們能夠

2當地分支機構在復位 - 硬到地方的地方它應該是(沒有不需要的提交),然後將其推入遠程。事實上,沒有必要重新設置 - 在當地很難。您可以通過在遠程分支上提供正確的ID來推送:git push --force the-remote right-revision-id:remote-branch

+0

所以我的功能分支被稱爲feature/validate-messages,並且我從feature/Auth-System創建了它,所以有來自Auth-System分支的feature/validate-messages內的提交,我假設創建validate-messages分支從我的開發分支。所以如果我是正確的,我應該運行這個:'git push --force origin dev:feature/validate-messages'?那會做什麼,它會保留我在feature/validate-messages中提交的提交,並只從Auth-System分支中刪除提交? – hugyt7

+0

不是。假設有** 3 **提交,它們是功能/驗證消息的一部分,您將其放在功能/身份驗證系統之上(並且該功能/身份驗證系統在本地和遠程都正確指向了正確的修訂版) 。如果是這樣的話:'''git checkout --detach dev; git cherry-pick feature/validate-messages〜3..feature/validate-messages; git branch -f feature/validate-messages; git push -f原始特性/驗證消息'''。給或拿。 – eftshift0

+0

好吧,我認爲第一個選項似乎更容易,但我有大約10個提交刪除,但我怎麼會奇才選擇10承諾? – hugyt7

相關問題