2012-12-16 76 views
177

是否可以提交併將更改從一個分支推送到另一個分支。將提交推送到另一個分支

假設我在BRANCH1 COMMITED變化,並希望他們推到BRANCH2

BRANCH1,是有效的事:

git push origin **BRANCH2** 

,然後復位BRANCH1?

回答

342

這幾乎可以奏效。

當推到非默認的分支,你需要指定源ref和目標價:

git push origin branch1:branch2 

或者

git push <remote> <branch with new changes>:<branch you are pushing to> 
+11

'branch1'和'branch2'都需要在遠程?如果你想從本地'branch1'推送到遠程'origin branch2',該怎麼辦? – orad

+5

@orad:不。第一部分實際上只是本地提交的標識符;它甚至不需要成爲分支。 – SLaks

+2

如果我想將一個遠程分支推送到另一個遠程分支,而不先檢出以前的分支,該怎麼辦? – abhisekp

47

當然,雖然它只會在BRANCH2快進時才起作用,或者如果你強制它。正確的語法做這樣的事情是

git push <remote> <source branch>:<dest branch> 

對於它如何工作的更詳細請參見上git push man page一個「的Refspec」的說明。另外請注意,強制推送和重置都是「重寫歷史記錄」的操作,除非您完全確定自己知道您在遠程存儲庫和其他方面所做的操作,否則不應該由心灰意懶的人來嘗試擁有相同項目的分支/克隆的人。

+2

謝謝!我只是補充一點,你可以用'git push --force remote local-branch:remote-branch'強制執行。 –

0

在我來說,我有一個本地提交,其沒有推到origin\master,但承諾到我的當地master分支。這個本地提交現在應該被推送到另一個分支。

隨着Git的擴展你可以做這樣的事情:

  • (創建,如果不存在和)簽出新的分支,在那裏你想要把你的提交。
  • 從歷史記錄中選擇提交,應將提交&推送到此分支。
  • 右鍵單擊並選擇櫻桃挑選提交
  • 櫻桃挑後按鈕。
  • 所選的提交獲取應用於您簽出的分支。現在提交併推送它。
  • 檢查你的舊分支,錯誤的提交。
  • 硬重置此分支到最後一次提交,在那裏一切正常(請注意你在這裏做什麼!)。您可以通過右鍵單擊第二次提交併選擇重置當前分支到這裏。如果你知道你在做什麼,請確認操作。

你也可以在GIT命令行上做到這一點。例如,從David Christensen複製:

我想你會發現git cherry-pick + git reset成爲一個更 更快的工作流程:

使用你相同的情況下,以「功能」是與分支的 最頂部承諾是不正確,這將會是很容易做到這一點:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

節省相當多的工作,而且是git cherry-pick 目的是要處理的情況。

我也會注意到,如果它不是最上面的 提交,這也會工作;你只需要爲這一論證commitish來摘櫻桃, 通過:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history

相關問題