【发布时间】:2016-09-15 12:22:29
【问题描述】:
目前我有两个分支:Master 和 Dev。上周我在 Master 分支(分支错误)上提交了我的工作,现在我需要将这些提交更改到 DEV 分支(右分支),有什么更好的方法来做到这一点?
我在 MAC 上使用 github 桌面
干杯, 拉斐尔
【问题讨论】:
-
您能否通过图表向我们展示
Dev和Master分支之间的关系?
目前我有两个分支:Master 和 Dev。上周我在 Master 分支(分支错误)上提交了我的工作,现在我需要将这些提交更改到 DEV 分支(右分支),有什么更好的方法来做到这一点?
我在 MAC 上使用 github 桌面
干杯, 拉斐尔
【问题讨论】:
Dev 和Master 分支之间的关系?
您的问题不清楚。所以我假设你需要旧版本的 master,你需要新版本的 Dev。这意味着您将需要更改您的 git 历史记录。如果您已将这些提交推送到您的远程,这不是您应该做的,因为您不想弄乱 git 历史记录。
你所做的是cherry-pick来自 master 的提交,然后将你的 master 重置为提交之前。
在你这样做之前,你应该备份你的数据:
git checkout master
git checkout -b backup_master
git checkout DEV
git checkout -b backup_DEV
【讨论】:
我的想法是使用补丁来避免可能的冲突。
git checkout master
git format-patch -1 HEAD (if thats all you want)
git checkout dev
git apply —check file.patch (check it first)
git am < file.patch
将 HEAD 替换为您想要的最旧提交的 SHA HASH,然后它将为每个当前提交创建一个 *.patch。然后以正确的顺序将它们单独应用到开发中。
然后您可以再次签出 master,通过签出该 SHA 哈希更改为您不希望在 master 上的提交之前的提交。然后用一个好消息提交它。我认为这可能会做到。如果我误解了或者我是公然错误的人,请纠正我。
【讨论】:
如果您已将这些提交推送到远程,则无法从 MASTER 分支中删除提交。
您可以做一件事,将最新的 MASTER 分支代码获取到 DEV 分支。
为此:
备份你的 DEV 分支git checkout -b backup_DEV 然后:
git checkout DEV
git stash
git rebase MASTER
git push DEV
git stash pop
现在您可以在 DEV 中看到该提交。
【讨论】: