【发布时间】:2012-12-03 13:52:45
【问题描述】:
是否可以将更改从一个分支提交并推送到另一个分支。
假设我在 BRANCH1 中提交了更改,并希望将它们推送到 BRANCH2。
从BRANCH1,是否有效:
git push origin **BRANCH2**
然后重置 BRANCH1?
【问题讨论】:
标签: git git-branch
是否可以将更改从一个分支提交并推送到另一个分支。
假设我在 BRANCH1 中提交了更改,并希望将它们推送到 BRANCH2。
从BRANCH1,是否有效:
git push origin **BRANCH2**
然后重置 BRANCH1?
【问题讨论】:
标签: git git-branch
这几乎可以工作。
推送到非默认分支时,需要指定源ref和目标ref:
git push origin branch1:branch2
或者
git push <remote> <branch with new changes>:<branch you are pushing to>
【讨论】:
branch1 和 branch2 都需要在遥控器上吗?如果要从本地branch1推送到远程origin branch2怎么办?
<remote>/<branch>
git push origin :branch2,认为它只会将当前本地分支推送到远程branch2,而是会删除遥控器branch2!正确的方式是git push origin HEAD:branch2。
当然,但它只有在 BRANCH2 的快进或强制执行时才会起作用。这样做的正确语法是
git push <remote> <source branch>:<dest branch>
请参阅git push man page 上对“refspec”的描述,以了解有关其工作原理的更多详细信息。另请注意,强制推送和重置都是“重写历史记录”的操作,除非您绝对确定您知道自己在针对任何远程存储库和其他存储库做什么,否则不应胆怯尝试拥有相同项目的分叉/克隆的人。
【讨论】:
git push --force remote local-branch:remote-branch 强制执行。
这很简单。假设您对驻留在本地和远程位置的分支 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那么您必须先重置这些更改。 #快乐学习
【讨论】:
git push origin branch1:branch2 命令的结果很糟糕:
在我的例子中,branch2 已被删除,branch1 已更新并进行了一些新的更改。
因此,如果您只想将更改从branch1 推送到branch2,请尝试以下步骤:
branch1:git add .
branch1: git commit -m 'comments'
开启branch1:git push origin branch1
开启branch2:git pull origin branch1
开启branch1:恢复到上一次提交。
【讨论】:
git checkout <the-previous-SHA-code>
当您将代码推送到另一个分支时,只需遵循以下 git 命令即可。请记住 demo 是我的另一个分支名称,您可以将其替换为您的分支名称。
git push origin master:demo
【讨论】:
在我的情况下,我有一个本地提交,它没有被推送到 origin\master,而是提交到我的本地 master 分支。这个本地提交现在应该被推送到另一个分支。
使用 Git 扩展,您可以执行以下操作:
您也可以在 GIT 命令行上执行此操作。从David Christensen复制的示例:
我想你会发现
git cherry-pick+git reset非常重要 更快的工作流程:使用相同的场景,“功能”是具有 最顶层的提交不正确,这样做会容易得多:
git checkout mastergit cherry-pick featuregit checkout featuregit reset --hard HEAD^省了不少功夫,是
git cherry-pick的场景 旨在处理。我还要注意,如果它不是最上面的,这也可以 犯罪;你只需要对挑选樱桃的论点做出承诺, 通过:
git checkout mastergit cherry-pick $sha1git checkout featuregit rebase -i ... # whack the specific commit from the history
【讨论】:
你可以轻松做到这一点
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.
【讨论】:
完成。
对于这个问题: 命令是“
git push origin BRANCH1:BRANCH2
【讨论】:
@SLaks 答案的道具,这主要对我有用。但是在分支有不同头部的情况下。一种方便的方法是使用cherry-pick。
git log - 在 Branch1 上进行更改git checkout branch2 - 在哪里应用您的更改git cherry-pick SHA_OF_COMMIT_FROM_STEP_2【讨论】:
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
【讨论】:
您已提交到 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
【讨论】: