我已经完成了相当多的工作("你的分支在37次提交之前超过了'origin/master'.")这真的应该进入它自己的分支而不是进入master.这些提交只存在于我的本地机器上,并没有被推到origin,但情况有点复杂,因为其他开发人员一直在推动origin/master,我已经撤消了这些更改.
如何追溯将我的37个本地提交移动到新分支?根据文档,似乎git rebase --onto my-new-branch master或...origin/master应该这样做,但两者都只是给我错误"致命:需要单一修订". man git-rebase没有提供修改,rebase并且其示例没有这样做,所以我不知道如何解决此错误.
(请注意,这不是将现有的,未完成的工作移动到Git中的新分支或如何将我的本地未提交的更改合并到另一个Git分支中的重复?因为这些问题涉及本地工作树中未提交的更改,而不是具有的更改已在当地承诺.)
Mar*_*air 490
这应该没问题,因为你还没有在其他任何地方推送你的提交,并且你可以自由地重写你的分支的历史origin/master.首先,我会运行一个git fetch origin以确保它origin/master是最新的.假设您目前正在使用master,您应该可以:
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
...这将重播所有提交,在没有的origin/master到origin/master.rebase的默认操作是忽略合并提交(例如你git pull可能引入的那些),它只是尝试将每个提交引入的补丁应用到origin/master.(您可能必须在此过程中解决一些冲突.)然后您可以根据结果创建新分支:
git branch new-work
Run Code Online (Sandbox Code Playgroud)
...然后将您的master身份重置为origin/master:
# Use with care - make sure "git status" is clean and you're still on master:
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
当使用git branch,git reset等等进行这种操作分支时,我发现经常使用gitk --all或类似工具查看提交图是有用的,只是为了检查我是否理解了所有不同引用指向的位置.
或者,您可能刚刚根据主人所在的位置创建了一个主题分支(git branch new-work-including-merges),然后master如上所述重置.但是,由于您的主题分支将包含合并,origin/master并且您尚未推送您的更改,我建议您进行改造以使历史更整洁.(此外,当您最终将主题分支合并回master时,更改将更加明显.)
Sta*_*chu 111
如果你的提交数量很少而你并不关心这些提交是否合并为一个mega-commit,那么这种做法效果不错,并不像以下那样可怕git rebase:
unstage文件(用提交#替换1)
git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)
创建一个新的分支
git checkout -b NewBranchName
Run Code Online (Sandbox Code Playgroud)
添加更改
git add -A
Run Code Online (Sandbox Code Playgroud)
提交
git commit -m "Whatever"
Run Code Online (Sandbox Code Playgroud)
NiR*_*maL 61
我坚持同样的问题.我找到了最容易分享的解决方案.
1)根据您的更改创建新分支.
git checkout -b mybranch
Run Code Online (Sandbox Code Playgroud)
2)在远程服务器上推送新的分支代码.
git push origin mybranch
Run Code Online (Sandbox Code Playgroud)
3)结账回主分公司.
git checkout master
Run Code Online (Sandbox Code Playgroud)
4)使用远程服务器重置主分支代码并删除本地提交.
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
小智 23
另一种方法假设branch1 - 是具有提交的更改branch2的分支 - 是期望的分支
git fetch && git checkout branch1
git log
Run Code Online (Sandbox Code Playgroud)
选择您需要移动的提交ID
git fetch && git checkout branch2
git cherry-pick commit_id_first..commit_id_last
git push
Run Code Online (Sandbox Code Playgroud)
现在从初始分支恢复未删除的提交
git fetch && git checkout branch1
git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)
或者,在您提交错误的分支后,执行以下步骤:
git loggit diff {previous to last commit} {latest commit} > your_changes.patchgit reset --hard origin/{your current branch}git checkout -b {new branch}git apply your_changes.patch我可以想象第一步和第二步有一个更简单的方法.
关于什么:
git reset 在开始进行更改之前回到最后一次提交.git pull 通过重置仅重新拉出您丢弃的远程更改.或者,当您尝试重新合并分支时,这会爆炸吗?
小智 5
这是一个更简单的方法:
创建一个新分支
在您的新分支上执行git merge master- 这会将您提交的(未推送的)更改合并到您的新分支
删除你本地的master分支git branch -D master使用-D而不是-d因为你想强制删除分支。
只需git fetch在您的 master 分支上执行 a 操作,然后git pull在您的 master 分支上执行 a 操作即可确保您的团队拥有最新的代码。
| 归档时间: |
|
| 查看次数: |
139978 次 |
| 最近记录: |