将提交推送到另一个分支

jvi*_*tti 333 git git-branch

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

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

BRANCH1开始,它是否有效:

git push origin **BRANCH2**
Run Code Online (Sandbox Code Playgroud)

然后重置BRANCH1?

SLa*_*aks 617

这几乎可以奏效.

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

git push origin branch1:branch2
Run Code Online (Sandbox Code Playgroud)

要么

git push <remote> <branch with new changes>:<branch you are pushing to> 
Run Code Online (Sandbox Code Playgroud)

  • `branch1`和`branch2`都需要在遥控器上吗?如果你想从本地`branch1`推送到远程`origin branch2`怎么办? (25认同)
  • 要知道有人试图(比如我自己)运行`git push origin:branch2`,认为它只会将当前的本地分支推送到远程`branch2`,它将改为**删除**远程`branch2`!正确的方法是`git push origin HEAD:branch2`. (13认同)
  • @orad:不.第一部分实际上只是本地提交的标识符; 它甚至不需要成为一个分支. (11认同)
  • @abhisekp:使用相同的语法.要引用源分支,请使用`<remote>/<branch>` (6认同)
  • @abhisekp:正是我刚才所说的.目前的分支完全无关紧要. (4认同)
  • 如果我想先将一个远程分支推送到另一个远程分支而不先检查前一个分支怎么办? (2认同)
  • 如果我想将另一个分支推送到它的跟踪远程分支而不先检查以使其成为当前分支,该怎么办? (2认同)
  • 请注意, `git push origin :` 将“匹配”分支推送到原点,即:对于本地端存在的每个分支,如果远程端已存在同名分支,则更新远程端。这种情况例如,可能会出现带有未定义变量的 shell 脚本。 (2认同)

Rya*_*art 70

当然,虽然只有当它是BRANCH2的快速前进或强迫它时它才会起作用.做这样的事情的正确语法是

git push <remote> <source branch>:<dest branch> 
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!我只想补充一点,你可以强制使用`git push --force remote local-branch:remote-branch`. (6认同)

Baa*_*gan 17

  1. 在 BRANCH1 上提交您的更改。
  2. 打开终端并输入命令 ->“git push <remote_name> <branch1_name>:<branch2_name>”

完毕。

对于这个问题:命令是

git push origin BRANCH1:BRANCH2

编辑:现在我意识到,GitHub Desktop 具有良好的 UI,可以将您的更改从一个分支转移到另一个分支。当然,这不是比用手在终端中输入命令更好的选择。


Bil*_*een 13

非常简单 假设您已经对位于本地和远程位置的分支机构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

  • @MárioHenrique是的,它很明显,因为“-b”用于创建新分支,而如果分支已经存在,您可以跳过此选项。 (5认同)

Ben*_*ari 10

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

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

因此,如果您只想branch2从推送更改branch1,请尝试以下步骤:

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

  • branch2git pull origin branch1

  • On branch1:恢复到之前的提交。


小智 9

支持@SLaks的答案,这对我来说主要有效。但如果分支有不同的头。一种方便的方法是使用cherry-pick。

  1. git log- 在 Branch1 上进行更改
  2. 复制您的更改的提交 SHA
  3. git checkout branch2- 在哪里应用您的更改
  4. git cherry-pick SHA_OF_COMMIT_FROM_STEP_2


tes*_*ing 5

就我而言,我有一个本地提交,它没有推送到origin\master,而是提交给我的本地master分支。现在应该将这个本地提交推送到另一个分支。

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

  • (如果不存在则创建并)签出您想要将提交推送到的新分支。
  • 从历史记录中选择提交,该提交应该被提交并推送到此分支。
  • 右键单击并选择Cherry pick commit
  • 之后按樱桃采摘按钮。
  • 选定的提交将应用到您签出的分支。现在提交并推送它。
  • 检查你的旧分支,看看有错误的提交。
  • 将此分支硬重置为倒数第二次提交,一切正常(请注意您在这里做什么!)。您可以通过右键单击倒数第二个提交并选择将当前分支重置到此处来完成此操作。如果您知道自己在做什么,请确认操作。

您也可以在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 设计用于处理的场景。

我还要指出,如果它不是最顶层的提交,这也将起作用;你只需要通过以下方式提交关于cherry-pick的论点:

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