将提交推送到另一个分支

时间:2012-12-16 01:12:02

标签: git

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

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

BRANCH1 ,是否有效:

git push origin **BRANCH2**

然后重置BRANCH1?

9 个答案:

答案 0 :(得分:551)

这几乎可以奏效。

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

git push origin branch1:branch2

或者

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

答案 1 :(得分:58)

当然,虽然只有当它是BRANCH2的快速前进或强迫它时它才会起作用。执行此类操作的正确语法是

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

有关其工作原理的详细信息,请参阅git push man page上“refspec”的说明。另请注意,强制推送和重置都是“重写历史记录”的操作,除非您完全确定知道自己在处理任何远程存储库和其他存储库方面做了什么,否则不应该被胆小的人尝试。有同一项目的分叉/克隆的人。

答案 2 :(得分:5)

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

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

  

git checkout -b B

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

  

git add。 //或特定文件

步骤03:提交更改

  

git commit -m“ commit_message”

步骤04::将更改推送到新分支 B 。以下命令将远程创建一个新分支 B

  

git push origin B

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

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

答案 3 :(得分:2)

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

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

  • (如果不存在则创建并结帐)新分支,您要在其中推送您的提交。
  • 从历史记录中选择提交,该提交应该被提交&amp;推到这个分支。
  • 右键单击并选择 Cherry pick commit
  • 之后按 Cherry pick 按钮。
  • 所选提交已应用于已签出的分支。现在提交并推送它。
  • 检查您的旧分支,错误提交。
  • 将此分支硬重置为最后一次提交,其中一切正常(请注意您在这做什么!)。您可以通过右键单击最后一次提交来选择将当前分支重置为此处。如果您知道自己在做什么,请确认操作。

您也可以在 GIT命令行上执行此操作。从David Christensen复制的示例:

  

我认为你会发现git cherry-pick + git reset很多   更快的工作流程:

     

使用相同的场景,将“feature”作为分支   最顶层的提交不正确,这样做会容易得多:

     

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

     

保存了相当多的工作,并且是git cherry-pick的方案   旨在处理。

     

我还要注意,如果它不是最顶层的话,这也会有效   承诺;你只需要承诺挑选樱桃,   通过:

     

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

答案 4 :(得分:2)

当您将代码推送到另一个分支时,只需遵循以下git命令。记住 demo 是我的其他分支名称,您可以用您的分支名称替换。

git push origin master:demo

答案 5 :(得分:1)

我用git push origin branch1:branch2命令得到了不好的结果:

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

因此,如果您只希望将更改从branch2推到branch1,请尝试以下步骤:

  • branch1上:git add .
  • branch1上:git commit -m 'comments'
  • branch1上:git push origin branch1

  • branch2上:git pull origin branch1

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

答案 6 :(得分:0)

您已承诺使用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

答案 7 :(得分: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)

答案 8 :(得分:-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