git:如何在合并时覆盖所有本地更改?

kub*_*ubi 15 git

这是情况.我在master分公司工作.我创建了file1并提交.我创建了file2并提交.哎呦.有一天,我可能想要使用file2,但绝对不应该放在master分支中.所以我不会丢失我使用的file2

git checkout head~1
git branch new-branch
git checkout new-branch
Run Code Online (Sandbox Code Playgroud)

这样我才能继续发展.我添加file3 new-branch.如果你一直在关注,我有两个分支,master包含"file1"和"file2" new-branch,包含"file1"和"file3".

现在是时候把我已经做出的改变带回主分支了.最好的方法是什么?我绝对希望master分支的负责人在它们出现时指向文件new-branch,但我也不想丢失我在file2中通过重置而完成的工作,以防我想使用它.

请记住,这是一种简化.而不是只有三个文件,我有十几个文件,其中有几十行代码被改变,所有这些都有多次提交.我当然希望解决方案不是逐个文件合并/签出,因为这将是一个巨大的痛苦.

有任何想法吗?

Ran*_*rtz 3

我正在主分支上工作。我创建 file1 并提交。

date >file1
git add file1
git commit -m 'added file1'
Run Code Online (Sandbox Code Playgroud)

我创建 file2 并提交。

date >file2
git add file2
git commit -m 'added file2'
Run Code Online (Sandbox Code Playgroud)

哎呀。有一天我可能想使用 file2,但它绝对不应该放在 master 分支中。

哎呀。很简单。从您所在的位置创建一个新分支:

git checkout -b savingfile2
Run Code Online (Sandbox Code Playgroud)

这将使 file2 更改 的提交savingfile2。现在回去放松一下大师

git checkout master
git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)

此时,导致 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'
Run Code Online (Sandbox Code Playgroud)

现在我们终于想要 file2:

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
Run Code Online (Sandbox Code Playgroud)

应该可以做到这一点。