每个开发人员都会不时地遇到这种情况。您开始编写新功能并忘记在本地首先进行分支。
所以,如果发生了这种情况,我可以说嘿,将这些未提交的(或者已经提交 - 我知道这两种情况,我想用这个覆盖)转移到我当地的新分支,所以我不必支持它们并将我的更改复制到新分支以便能够继续我的方式吗?
答案 0 :(得分:9)
如果您尚未提交更改,则可以在提交之前切换到新分支。
git checkout -b my-new-branch
这将创建一个名为my-new-branch
的新分支,并立即将其检出。
答案 1 :(得分:5)
除非您在开始处理该功能后进行了任何不应进入功能分支的更改,否则就像创建功能分支并将错误的高级主分支倒回到最后一个不属于功能分支:
MA --- MB --- MC --- FA --- FB --- FC <- master
git checkout -b feature
MA --- MB --- MC --- FA --- FB --- FC <- feature
^
|
master
git branch -f master MC
MA --- MB --- MC --- FA --- FB --- FC <- feature
^
|
master
如果您实际混合了提交,则会出现更大的问题。在这种情况下,您需要执行rebase以取消混合提交,以便您可以继续执行上述步骤:
MA --- FA --- MB --- MC --- FB --- FC <- master
git rebase -i MA
#reorder the lines by moving the commit FA down after MC
MA --- MB' --- MC' --- FA' --- FB' --- FC' <- master
#proceed as above
请注意,您正在使用以下内容重写历史记录:如果您已发布FA
,则表示您遇到了麻烦。在这种情况下,其他人会注意到你以某种方式搞砸了,正确的解决方案将包括人与人之间的大量沟通。
答案 2 :(得分:3)
现在,在这种情况下,您可以做的是
-对从C3到C0的提交进行补丁,以便对保存在C3.patch .... C0.patch等文件中的各个提交进行更改 回购目录本身
-将HEAD重置为C4
-并检查所有未暂存的更改,以便您可以创建一个新分支
-并将这些更改重新应用到新创建的分支
基本上可以做到
-- git format-patch HEAD ~ {n} (n is 4 in this case)
-- git reset HEAD~{n} (reached master or parent branch)
-- git checkout -- .
-- git checkout -b <new-branch-name>
-- git am (or git am *.patch) (which is git apply -r C*.patch in this case)
-如果已暂存,请通过将头重置为您进行这些更改而开始的上一个提交来取消暂存
-对这些更改进行补丁,以便将其存储在本地repo目录中
-签出这些更改并新建一个分支
-应用创建的补丁将这些更改恢复到新分支上
基本上可以做到
-- git reset HEAD~1
-- git diff > unstaged_changes.patch
-- git branch -b <new-branch-name>
-- git am unstaged_changes.patch
答案 3 :(得分:1)
隐藏更改,创建新分支然后将存储重新应用到新分支是否无效?
答案 4 :(得分:1)
请按照以下步骤操作:
创建一个新分支:
git branch newfeature
结帐新分行:(这不会重置您的工作。)
git checkout newfeature
现在就在这个新分支上提交你的工作:
git commit -s
答案 5 :(得分:1)
然后,在文件被修改后切换到新分支不会有任何危害。始终在签出的任何分支的上下文中查看已编辑的未提交文件:
git checkout -b mytopicbranch
描述如下:here:
git branch mytopicbranch
现在,它具有您要进行的所有提交。
git reset abc5b0de1 --hard
假设abc5b0de1
是您进行意外提交之前的提交指纹。
现在您可以根据需要切换回mytopicbranch
。