是否有可能将变更从一个分支提交到另一个分支。

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

从BRANCH1中,这样做是否有效:

git push origin **BRANCH2**

然后重置BRANCH1?


当前回答

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

使用Git扩展,你可以做这样的事情:

(Create if not existing and) checkout new branch, where you want to push your commit. Select the commit from the history, which should get commited & pushed to this branch. Right click and select Cherry pick commit. Press Cherry pick button afterwards. The selected commit get's applied to your checked out branch. Now commit and push it. Check out your old branch, with the faulty commit. Hard reset this branch to the second last commit, where everything was ok (be aware what are you doing here!). You can do that via right click on the second last commit and select Reset current branch to here. Confirm the opperation, if you know what you are doing.

您也可以在GIT命令行上执行此操作。例子摘自大卫·克里斯滕森:

I think you'll find git cherry-pick + git reset to be a much quicker workflow: Using your same scenario, with "feature" being the branch with the top-most commit being incorrect, it'd be much easier to do this: git checkout master git cherry-pick feature git checkout feature git reset --hard HEAD^ Saves quite a bit of work, and is the scenario that git cherry-pick was designed to handle. I'll also note that this will work as well if it's not the topmost commit; you just need a commitish for the argument to cherry-pick, via: git checkout master git cherry-pick $sha1 git checkout feature git rebase -i ... # whack the specific commit from the history

其他回答

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

在我的例子中,branch2被删除了,branch1被更新了一些新的变化。

因此,如果你只想把从branch1推到branch2上的更改,试试下面的步骤:

在branch1上:git添加。 git在branch1上提交-m 'comments' 在branch1上:git push origin branch1 在branch2上:git拉动起源branch1 在branch1上:恢复到上一次提交。

您已经提交到BRANCH1,并希望在不丢失更改的情况下摆脱此提交? Git重置是你所需要的。 做的事:

git branch BRANCH2

如果你想让BRANCH2成为一个新的分支。如果你愿意,你也可以在最后将它与另一个分支合并。如果BRANCH2已经存在,则省略此步骤。

然后做:

git reset --hard HEAD~3

如果你想重置你已经提交的分支上的提交。这将使用最后三次提交的更改。

然后执行以下操作,将重置后的提交提交到BRANCH2

git checkout BRANCH2

这个来源很有帮助: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

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

使用Git扩展,你可以做这样的事情:

(Create if not existing and) checkout new branch, where you want to push your commit. Select the commit from the history, which should get commited & pushed to this branch. Right click and select Cherry pick commit. Press Cherry pick button afterwards. The selected commit get's applied to your checked out branch. Now commit and push it. Check out your old branch, with the faulty commit. Hard reset this branch to the second last commit, where everything was ok (be aware what are you doing here!). You can do that via right click on the second last commit and select Reset current branch to here. Confirm the opperation, if you know what you are doing.

您也可以在GIT命令行上执行此操作。例子摘自大卫·克里斯滕森:

I think you'll find git cherry-pick + git reset to be a much quicker workflow: Using your same scenario, with "feature" being the branch with the top-most commit being incorrect, it'd be much easier to do this: git checkout master git cherry-pick feature git checkout feature git reset --hard HEAD^ Saves quite a bit of work, and is the scenario that git cherry-pick was designed to handle. I'll also note that this will work as well if it's not the topmost commit; you just need a commitish for the argument to cherry-pick, via: git checkout master git cherry-pick $sha1 git checkout feature git rebase -i ... # whack the specific commit from the history

@SLaks的答案是小道具,这对我来说基本适用。但是在分支有不同头的情况下。一个方便的方法是使用樱桃。

git登录Branch1与您的更改 复制提交SHA您的更改 Git checkout branch2 -在这里应用您的更改 git选择SHA_OF_COMMIT_FROM_STEP_2

差不多可以了。

当推入一个非默认的分支时,你需要指定源ref和目标ref:

git push origin branch1:branch2

Or

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