情况就是这样。我在master
分部工作。我创建文件1并提交。我创建文件2并提交。哇哦。也许有一天我会使用file2,但它绝对不是应该放在主分支中的东西。这样我就不会丢失我使用的文件2
git checkout head~1
git branch new-branch
git checkout new-branch
所以我可以继续发展。我将file3添加到
new-branch
。如果你一直注意的话,我有两个分支,master
包含“file1”和“file2”,new-branch
包含“file1”和“file3”。现在是时候将我所做的更改恢复到主分支了。最好的方法是什么?我当然希望
master
分支的头指向出现在new-branch
中的文件,但我也不希望通过重置来丢失在file2中所做的工作,以防我想使用它。请记住,这是一个简化。我有十几个文件,其中有几十行代码在各地被更改,而不是只有三个文件,所有这些文件都有多个提交。我当然希望解决方案不是逐个文件合并/签出,因为这将是一个巨大的痛苦。
有什么想法吗?
最佳答案
我在主科工作。我
创建文件1并提交。
date >file1
git add file1
git commit -m 'added file1'
我创建文件2并提交。
date >file2
git add file2
git commit -m 'added file2'
哇哦。我可能想用文件2,
总有一天,但肯定不是
应该放在
主分支。
哎呀。非常简单。从您所在的位置创建新分支:
git checkout -b savingfile2
这将使file2更改
savingfile2
的提交。现在回去放松一步git checkout master
git reset --hard HEAD~1
此时,通向master的提交将反映添加了file1,
master和savingfile2之间的额外提交将是file2的添加。
如果您对master做了更多的更改,然后希望最终返回file2,您将希望将该分支重新定位到新的master上:
date >file3
git add file3
git commit -m 'adding file3'
date >file4
git add file4
git commit -m 'adding file4'
现在我们终于要文件2:
git checkout savingfile2
git rebase master # might need to fix conflicts here
git checkout master
git merge savingfile2 # will be a fast-forward
git branch -d savingfile2 # no need any more
这应该可以做到。
关于git - git:如何在 merge 时覆盖所有本地更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2025085/