是否可以从一个分支提交和推送变化到另一个分支。
假设我在BRANCH1提交了修改,想把它们推送到BRANCH2。
从BRANCH1,是否可以这样做。
git push origin **BRANCH2**
然后重置BRANCH1?
当然,不过只有在BRANCH2的快进或你强制的情况下才会起作用。做这种事的正确语法是
git push <remote> <source branch>:<dest branch>
更多细节请参见git push man page中关于"refspec"的描述,它是如何工作的。还需要注意的是,强制推送和重置都是重写历史的操作,胆小的人不应该尝试,除非你绝对确定你知道自己在做什么,对任何远程仓库和其他拥有同一项目的分叉/克隆的人来说。
这很简单。 假设你已经对你的分支A做了修改,它同时存在于本地和远程,但你想把这些修改推送到分支B,它不存在于任何地方。
步骤-01:创建并切换到新的分支B。 git checkout -b 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,那么你必须先重新设置这些修改。
在我的例子中,我有一个本地提交,它没有被推送到origin/master
,而是被推送到我的本地master
分支。这个本地提交现在应该被推送到另一个分支。
使用Git扩展,你可以做这样的事情。
*(如果不存在,则创建)签出新的分支,在那里推送你的提交。
你也可以在*GIT命令行上这样做。例子抄自[David Christensen*](https://www.endpoint.com/blog/2012/06/21/moving-commit-to-another-branch-in-git)。
我认为你会发现
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 ...# 从历史中删除特定的提交`。
我用 "git push origin branch1:branch2 "命令得到了一个不好的结果。
在我的例子中,"branch2 "被删除了,而 "branch1 "被更新了。
因此,如果你想让变化只从branch1
推送到branch2
,请尝试以下步骤。
在 "branch1 "上
git add .
在 branch1
上: git add .
git commit -m 'comments'
。
在 branch1
上: git push origin branch1:
git push origin branch1`
在branch2
上。
git pull origin branch1
在branch1
上。
恢复到以前的提交。
驾轻就熟
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)
你已经提交了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