推送提交到另一个分支


384

是否可以将更改从一个分支提交到另一个分支。

假设我在BRANCH1中提交了更改,并希望将其推送到BRANCH2中

BRANCH1执行以下操作是否有效:

git push origin **BRANCH2**

然后重置BRANCH1?

Answers:


710

那几乎可以工作。

当推送到非默认分支时,您需要指定源引用和目标引用:

git push origin branch1:branch2

要么

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

26
两者都做branch1,并branch2需要被遥控器上的?如果要从本地推branch1送到远程该origin branch2怎么办?
orad 2015年

11
@orad:否。第一部分实际上只是本地提交的标识符。它甚至不需要成为分支。
Slaks 2015年

6
@abhisekp:使用相同的语法。要引用源分支,请使用<remote>/<branch>
SLaks

4
@abhisekp:完全按照我刚才说的做。当前分支完全不相关。
凌晨

20
要知道任何人动心(像我一样)来运行git push origin :branch2以为这样就只是把当前的本地分支到远程branch2,它将代替删除远程branch2!正确的方法是git push origin HEAD:branch2
Helder Pereira

72

当然,尽管仅当它是BRANCH2的快进或您强行使用时才起作用。做这种事情的正确语法是

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

有关其工作原理的更多详细信息,请参见git push手册页上“ refspec”的描述。还要注意,强制推送和重置都是“重写历史记录”的操作,因此,除非您绝对确定知道自己对任何远程存储库和其他存储库正在做什么,否则请不要轻率地尝试。具有相同项目的分叉/克隆的人。


6
谢谢!我要补充一点的是您可以强制使用git push --force remote local-branch:remote-branch
Ferran Maylinch '16

16

非常简单 假设您对本地和远程的分支机构A进行了更改,但您想将这些更改推送到任何地方都不存在的分支机构B。

步骤01:创建并切换到新的分支B

git checkout -b B

步骤02:在新的本地分支中添加更改

git添加 //或特定文件

步骤03:提交更改

git commit -m“ commit_message”

步04:将更改到新的分支。下面的命令将远程创建一个新的分支B

git push起源B

现在,您可以从bitbucket验证分支B比分支A多提交一次。当您结帐分支A时,这些更改将不存在,因为这些更改已被推送到分支B中

注意:如果已将更改提交到分支A,然后要将这些更改转移到新的分支B,则必须首先重置这些更改。#HappyLearning


2

在我的情况下,我有一个本地提交,但未提交到origin\master,而是提交到了本地master分支。现在应将此本地提交推送到另一个分支。

使用Git Extensions,您可以执行以下操作:

  • (如果不存在,则创建,然后)在要推送提交的地方签出新分支。
  • 从历史记录中选择提交,它将被提交并推送到该分支。
  • 右键单击并选择Cherry pick commit
  • 然后按Cherry选择按钮。
  • 所选的提交获取将应用于您的已签出分支。现在提交并推送它。
  • 检查您的旧分支,并提交错误的内容。
  • 将该分支硬重置为最后一个提交,一切正常(请注意您在这里做什么!)。您可以通过右键单击倒数第二个提交并选择Reset current branch to here来完成。如果您知道自己在做什么,请确认操作。

您也可以在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 是设计用来处理的方案。

我还要注意,如果它不是最高的提交,那么它也将起作用。您只需要通过以下方式为Cherry-pick的参数添加一个命令即可:

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


2

我的git push origin branch1:branch2命令结果不好:

就我而言,已被branch2删除并branch1已进行了一些新更改。

因此,如果你只想要改变的推动branch2branch1,请尝试以下方法:

  • branch1git add .
  • branch1git commit -m 'comments'
  • branch1git push origin branch1

  • branch2git pull origin branch1

  • branch1:恢复为上一次提交。


0

你可以轻松做到这一点

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)

-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  


1
请添加一些代码说明。
Nakx

-4

您已承诺BRANCH1,并希望在不丢失更改的情况下摆脱此承诺? git reset是您需要的。做:

git branch BRANCH2

如果您希望BRANCH2成为新分支。如果需要,还可以在最后将其与另一个分支合并。如果BRANCH2已经存在,则省略此步骤。

然后做:

git reset --hard HEAD~3

如果要在已提交的分支上重置提交。这将更改最后三个提交。

然后执行以下操作将重置的提交提交到BRANCH2

git checkout BRANCH2

此来源很有帮助:https : //git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.