情况就是这样。我在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/

10-13 05:24