如何将本地分支 A 中的多个本地提交推送到远程分支 B 并从本地分支 A 中清除它们?

Posted

技术标签:

【中文标题】如何将本地分支 A 中的多个本地提交推送到远程分支 B 并从本地分支 A 中清除它们?【英文标题】:How to push several local commits in local branch A into remote branch B and clear them from local branch A? 【发布时间】:2019-12-06 01:53:56 【问题描述】:

我在本地签出了一些分支。我对它进行了一次完整的 och 更改。就在我准备将它们推送到远程仓库时,我意识到我在错误的分支上工作。

我需要在本地和远程将这些提交“移动”到另一个分支,即:

我有:

本地分支 A 加上更改(已提交,未推送), 本地分支 B 没有变化, 当前已签出本地分支 A 远程分支 A 没有变化, 远程分支 B 没有变化

最后我需要:

本地分支 A 没有变化, 本地分支 B 加上更改(推送), 远程分支 A 没有变化, 远程分支 B 加上更改。

我是 git 新手,不是专业的开发人员,所以 git-push(1) 在没有进一步研究的情况下对我没有帮助。

我看到了这个帖子:git push command for pushing a local commit to a different remote branch

它暗示:

git push ssh://company.com:29418/platform/vendor/com-proprietary/ship/ftm 72bc75e409e50dcad29bd790b4b6478dc6668f12:jb_mr2

显然jb_mr2-part 我更改为我的分支 B 的名称,但是我从哪里获得其余的数字,以及通过什么方式摆脱分支 A 上的更改?

【问题讨论】:

一位朋友帮助我,我们想通了: 一位朋友帮助我,我们想通了:``` $(A) git log - 1236 个新文件需要检查 - 1235 个新文件需要检查 - 1234 个已检查文件准备好用于项目 $ (A) git checkout B $(B) git cherry-pick 1235, 1236 $(B) git checkout A $(A) git reset --hard 1234 ``` 显然这些数字要长得多,而且不是按顺序排列的,因为它们是校验和。 Move the most recent commit(s) to a new branch with Git的可能重复 这是对这类问题的一个很好的回答('如何将提交从一个分支移动到另一个'):***.com/a/36463546/20371 谢谢,Yawar,我在研究中没有遇到该线程,但这似乎是正确的(只是我已经有另一个分支)。无论如何,这次我解决了我的问题,但我会为那个答案添加书签,因为我很确定我很快就会忘记切换分支,可能会比我现在的少数提交更多。 【参考方案1】:

朋友帮了我,我们想通了:

$(A) git log 
- 1236 more new files need to check 
- 1235 new files need to check 
- 1234 checked files ready for project 
$(A) git checkout B 
$(B) git cherry-pick 1235
$(B) git cherry-pick 1236 
$(B) git checkout A 
$(A) git reset --hard 1234 

显然这些数字要长得多,而且不是按顺序排列的,因为它们是校验和。

这对我来说很好,因为我只需要处理几个提交。它们是依次最后一次提交

如果以后有不应该移动的提交,或者如果有很多提交,上面提到的 Yawar 的 answer 似乎值得一试。

【讨论】:

以上是关于如何将本地分支 A 中的多个本地提交推送到远程分支 B 并从本地分支 A 中清除它们?的主要内容,如果未能解决你的问题,请参考以下文章

git怎么将本地仓库推送到一个新的远程分支包含所有历史提交信息

git 强制推送到master

TortoiseGit- 创建本地新分支,提交推送到远程,本地新分支合并到工作分支,提交到远程工作分支等。

将所有本地未跟踪的分支推送到同一个远程

git本地分支推送到远程分支

如何将代码从新的本地文件夹推送到现有 Github 存储库的主分支并保留提交历史记录?