0

我想在我的整个历史之前的主分支上插入一个提交。我有这个我更改的软件堆栈,并将更改的版本作为初始提交提交。当我试图查看我最初更改的内容并注意到我没有首先提交原始堆栈时,我意识到我的错误已经很晚了。所以我试图在其他任何事情之前把它挤进去......

我发现了这个非常相似的问题,并认为只需添加某些文件的原始版本并提交就很简单。

但是变基开始抱怨每个文件:

CONFLICT (add/add): Merge conflict in XXXX

当我将文件合并到并尝试 rebase --continue 它仍然失败:

Applying: first version
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

第一个版本是我的主分支上的第一个提交。

我想要做的甚至可能吗?

4

3 回答 3

0

如果您不介意删除所做的所有更改,您可以返回到项目的第一个提交版本

git revert $id

$id 是您可以使用git log命令找到的提交的 id

然后你可以用你想要的版本进行修改

但是,请小心并在做之前三思而后行

于 2013-05-15T15:03:00.423 回答
0

问题是它尝试应用的第一个提交是一堆文件添加而不是文件更改,因为它通常会存储一个提交,因此您的初始提交添加了一堆文件,您尝试的提交也是如此基于。

我不是 100% 确定这是最好的方法,但它应该有效

使孤立分支进行提交,以便您的代码库变得与您的初始提交相同,将您的第二次提交重新定位到该新提交。

因为您的第二次提交实际上包含不应冲突的更改。

如果那不会做我认为你想要的,那么我认为我没有正确理解你的问题。

明智的命令应该是:

# first you need a new empty branch; let's call it `newroot`
git checkout --orphan newroot
git rm -rf .
#add all files you want
git commit -am 'initial commit'
git checkout 1st_commit
git merge -s ours newroot
git rebase --onto newroot --root 2nd commit
git branch -d newroot
于 2013-05-15T15:21:28.720 回答
0

您可以预期“原始堆栈”和“更改版本”之间的负载和负载冲突。也就是说,当您将“原始堆栈”作为第一次提交(在某个分支上)然后在堆栈的“更改版本”中进行合并时,一切都会发生冲突。但是,您所知道的是,“更改的版本”是正确的版本,因此您不必一一解决每个冲突。相反,您将使用:

git checkout --ours -- <files that conflict>       # see note below
git add -- <files that conflict>
git commit -m 'Resolved with --ours'

注意:有时 --ours 是正确的;有时 --theirs 是正确的,这取决于您是合并还是变基。选择一个,使用它,检查您是否获得了正确的文件,如果没有,请使用另一个。

于 2013-05-15T16:40:29.730 回答