539

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

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

BRANCH1,是否有效:

git push origin **BRANCH2**

然后重置 BRANCH1?

4

11 回答 11

978

这几乎会奏效。

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

git push origin branch1:branch2

或者

git push <remote> <branch with new changes>:<branch you are pushing to> 
于 2012-12-16T01:23:59.627 回答
87

当然,虽然它只有在 BRANCH2 的快进或者你强制它时才会起作用。做这样的事情的正确语法是

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

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

于 2012-12-16T01:15:04.123 回答
30

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

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

git checkout -b B

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

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

步骤 03:提交更改

git commit -m "commit_message"

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

git推送原点B

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

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

于 2018-11-20T07:28:10.583 回答
5

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

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

因此,如果您只想将更改推送到branch2from branch1,请尝试以下过程:

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

  • branch2git pull origin branch1

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

于 2018-10-28T08:18:20.787 回答
4

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

git push origin master:demo
于 2020-07-03T17:57:12.240 回答
3

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

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

  • (如果不存在,则创建并)签出您要推送提交的新分支。
  • 从历史中选择提交,它应该被提交并推送到这个分支。
  • 右键单击并选择Cherry pick commit
  • 之后按樱桃采摘按钮。
  • 选定的提交获取应用到您签出的分支。现在提交并推送它。
  • 用错误的提交检查你的旧分支。
  • 将此分支硬重置为倒数第二次提交,一切正常(注意你在这里做什么!)。您可以通过右键单击倒数第二次提交并选择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

于 2018-02-21T11:22:35.393 回答
2

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

  1. git log- 在 Branch1 上进行更改
  2. 复制您的更改的提交 SHA
  3. git checkout branch2- 在哪里应用您的更改
  4. git cherry-pick SHA_OF_COMMIT_FROM_STEP_2
于 2021-11-25T11:37:46.610 回答
1

你可以很容易地做到这一点

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.
于 2019-10-23T07:14:53.243 回答
0
  1. 在 BRANCH1 上提交您的更改。
  2. 打开终端并输入命令 -> "git push <remote_name> <branch1_name>:<branch2_name>"

完毕。

对于这个问题:命令是“

git push origin BRANCH1:BRANCH2
于 2021-11-06T10:45:14.503 回答
-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  

于 2020-02-14T02:11:09.107 回答
-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

于 2018-11-02T05:55:13.707 回答