我想在我的整个历史之前的主分支上插入一个提交。我有这个更改的软件堆栈,并将更改后的版本作为初始提交提交。当我试图看到我最初改变的内容并注意到我没有先提交原始堆栈时,我意识到我的错误。所以我试图在其他任何事情之前把它挤进去......
我找到了这个very similar question,并认为只添加某些文件的原始版本并提交是直截了当的。
但是,变形开始抱怨每个文件:
CONFLICT (add/add): Merge conflict in XXXX
当我合并文件并尝试重新绑定时 - 继续它仍然会失败:
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".
而第一个版本是我的主分支上的第一个提交。
我正在尝试做什么?
答案 0 :(得分:0)
如果您不介意删除所做的所有更改,可以使用
返回项目的第一个提交版本 git revert $id
$ id是您可以使用git log
命令
然后您可以使用您想要的版本进行修改
不过,在做这件事之前要小心并三思而行答案 1 :(得分: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
答案 2 :(得分:0)
您可以预期“原始堆栈”和“更改版本”之间的负载和负载冲突。也就是说,当你将'原始堆栈'作为第一个提交(在某个分支上)然后在堆栈的'更改版本'中合并时,那么一切都会发生冲突。但是,您知道的是“更改版本”是正确的版本,因此您无需逐个解决每个冲突。相反,你将使用:
git checkout --ours -- <files that conflict> # see note below
git add -- <files that conflict>
git commit -m 'Resolved with --ours'
注意:有时 - 行是正确的;有时 - 他们是正确的,这取决于你是合并还是变基。选择一个,使用它,检查你是否有正确的文件,如果你没有,请使用另一个。