【问题标题】:Push commits to another branch将提交推送到另一个分支
【发布时间】:2012-12-03 13:52:45
【问题描述】:

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

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

BRANCH1,是否有效:

git push origin **BRANCH2**

然后重置 BRANCH1?

【问题讨论】:

    标签: git git-branch


    【解决方案1】:

    这几乎可以工作。

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

    git push origin branch1:branch2
    

    或者

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

    【讨论】:

    • branch1branch2 都需要在遥控器上吗?如果要从本地branch1推送到远程origin branch2怎么办?
    • @orad:不。第一部分实际上只是本地提交的标识符;它甚至不需要是一个分支。
    • @abhisekp:使用相同的语法。要引用源分支,请使用&lt;remote&gt;/&lt;branch&gt;
    • @abhisekp:照我刚才说的去做。当前分支完全无关紧要。
    • 请注意任何人(比如我自己)试图运行git push origin :branch2,认为它只会将当前本地分支推送到远程branch2,而是会删除遥控器branch2!正确的方式是git push origin HEAD:branch2
    【解决方案2】:

    当然,但它只有在 BRANCH2 的快进或强制执行时才会起作用。这样做的正确语法是

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

    请参阅git push man page 上对“refspec”的描述,以了解有关其工作原理的更多详细信息。另请注意,强制推送和重置都是“重写历史记录”的操作,除非您绝对确定您知道自己在针对任何远程存储库和其他存储库做什么,否则不应胆怯尝试拥有相同项目的分叉/克隆的人。

    【讨论】:

    • 谢谢!我只是补充一点,您可以使用git push --force remote local-branch:remote-branch 强制执行。
    【解决方案3】:

    这很简单。假设您对驻留在本地和远程位置的分支 A 进行了更改,但您希望将这些更改推送到在任何地方都不存在的分支 B

    Step-01:创建并切换到新分支B

    git checkout -b B

    Step-02:在新的本地分支中添加更改

    混帐添加。 //或特定文件

    步骤 03:提交更改

    git commit -m "commit_message"

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

    git push origin B

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

    注意:如果您已将更改提交到分支 A,然后您希望将这些更改转移到新分支 B那么您必须先重置这些更改。 #快乐学习

    【讨论】:

    • 如果分支 B 已经存在,这不起作用
    • @MárioHenrique 是的,很明显,'-b' 用于创建新分支,而如果分支已经存在,则可以跳过此选项。
    【解决方案4】:

    git push origin branch1:branch2 命令的结果很糟糕:

    在我的例子中,branch2 已被删除,branch1 已更新并进行了一些新的更改。

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

    • 开启branch1:git add .
    • 开启branch1: git commit -m 'comments'
    • 开启branch1git push origin branch1

    • 开启branch2:git pull origin branch1

    • 开启branch1:恢复到上一次提交。

    【讨论】:

    • 您忘记添加一些命令来“恢复到上一次提交”。
    • @VladimirCh 只需 git checkout &lt;the-previous-SHA-code&gt;
    【解决方案5】:

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

    git push origin master:demo
    

    【讨论】:

      【解决方案6】:

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

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

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

      您也可以在 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的场景 旨在处理。

      我还要注意,如果它不是最上面的,这也可以 犯罪;你只需要对挑选樱桃的论点做出承诺, 通过:

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

      【讨论】:

        【解决方案7】:

        你可以轻松做到这一点

        git status
        git add .
        git commit -m "any commit"
        git pull origin master 
        git push origin master:development # assuming 'development' is the target branch name.
        

        【讨论】:

          【解决方案8】:
          1. 在 BRANCH1 上提交您的更改。
          2. 打开终端输入命令-> "git push :"

          完成。

          对于这个问题: 命令是“

          git push origin BRANCH1:BRANCH2
          

          【讨论】:

            【解决方案9】:

            @SLaks 答案的道具,这主要对我有用。但是在分支有不同头部的情况下。一种方便的方法是使用cherry-pick。

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

            【讨论】:

              【解决方案10】:

              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  

              【讨论】:

                【解决方案11】:

                您已提交到 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

                【讨论】:

                  猜你喜欢
                  • 2013-05-03
                  • 1970-01-01
                  • 2018-12-19
                  • 2010-10-27
                  • 1970-01-01
                  • 2020-11-30
                  • 1970-01-01
                  • 2015-10-16
                  相关资源
                  最近更新 更多