在git重新基址期间意外删除了文件。我可以重做吗?
我在我的项目上做了在git重新基址期间意外删除了文件。我可以重做吗?,git,Git,我在我的项目上做了git-rebase-origin/master,以便与上游合作 我在冲突解决期间删除了一些文件(不是在上次提交中),因为我认为我的分支中不需要它们。但我确实需要它们 我可以在其他地方签出上游文件,将这些文件复制到我的回购协议中,并创建一个表示“对不起”的提交,但这并不好。我宁愿“撤消”删除 我尝试根据运行git-rebase-I,并用e标记删除提交以进行编辑。但我没有看到任何文件。我所能做的就是修改提交,根据我所知,这只允许我编辑提交消息 那么,如何在我过去的提交中撤消删除
git-rebase-origin/master
,以便与上游合作
我在冲突解决期间删除了一些文件(不是在上次提交中),因为我认为我的分支中不需要它们。但我确实需要它们
我可以在其他地方签出上游文件,将这些文件复制到我的回购协议中,并创建一个表示“对不起”的提交,但这并不好。我宁愿“撤消”删除
我尝试根据运行git-rebase-I
,并用e
标记删除提交以进行编辑。但我没有看到任何文件。我所能做的就是修改提交,根据我所知,这只允许我编辑提交消息
那么,如何在我过去的提交中撤消删除
为了简单和完整,我将添加我使用的命令集:
git rebase -i <parent_of_the_wrong_commit>
# mark e next to the deleting commit and copy its hash
git reset HEAD^
git checkout -- the/accidentally/deleted/directory
git add .
git commit -c <the_copied_hash>
git rebase --continue
git-rebase-i
#在删除提交旁边标记e并复制其哈希
git复位头^
git checkout——目录/incomely/deleted/
git添加。
git提交-c
git rebase--继续吗
像您这样使用编辑节进行交互式重定基调是完全正确的,您只是对提交修改感到困惑。如果您向索引添加更改(git add…
)并执行git commit--amend-C HEAD
,则索引的当前状态将替换以前的提交状态,这意味着您可以向最新提交添加其他更改或撤消更改。(-C HEAD
获取了HEAD
提交的提交消息,因此修改了一个,而不需要或无法编辑它)与编辑节的交互重定基调与您所做的完全正确,您只是对提交修改感到困惑。如果您向索引添加更改(git add…
)并执行git commit--amend-C HEAD
,则索引的当前状态将替换以前的提交状态,这意味着您可以向最新提交添加其他更改或撤消更改。(-C HEAD
获取了HEAD
提交的提交消息,因此修改了该消息,而无需或无法对其进行编辑)
我所能做的就是结束提交,根据我所知,这只允许我编辑提交消息
不是真的。当你编辑这样的提交时,你可以做任何你通常想做的事情
要解决您的问题,我知道有两种最好的方法
1.中止整个过程,然后再试一次
使用git reflog
查找您在重新基址之前知道的提交。然后使用git reset--hard
修复master并重试
2.按原样修复重基
如前所述,可以使用交互式标志修复重基
在命令行中删除已断开的提交时,请记下提交ID(复制到剪贴板)
然后,git reset HEAD^
,它将撤消中断的提交并将这些更改放入您的工作目录中
现在只准备您想要的更改(git add--patch
)
通过以下任一方式对这些阶段性更改进行提交:
-使用新消息进行新提交git commit
-使用与以前相同的消息进行新提交(从剪贴板)git提交-c
git checkout--清除仍在工作目录中的错误更改。
这样,您就可以用git-rebase完成重新基址了——继续
祝你好运
还值得注意的是,提交中的更改可能不是非常原子化的。如果删除与其他更改是分开的,那么在交互式重新基址期间删除有问题的提交就是一个简单的问题
我所能做的就是结束提交,根据我所知,这只允许我编辑提交消息
不是真的。当你编辑这样的提交时,你可以做任何你通常想做的事情
要解决您的问题,我知道有两种最好的方法
1.中止整个过程,然后再试一次
使用git reflog
查找您在重新基址之前知道的提交。然后使用git reset--hard
修复master并重试
2.按原样修复重基
如前所述,可以使用交互式标志修复重基
在命令行中删除已断开的提交时,请记下提交ID(复制到剪贴板)
然后,git reset HEAD^
,它将撤消中断的提交并将这些更改放入您的工作目录中
现在只准备您想要的更改(git add--patch
)
通过以下任一方式对这些阶段性更改进行提交:
git commit
-使用新消息进行新提交
git提交-c
-使用与以前相同的消息进行新提交(从剪贴板)
然后使用git checkout--清除仍在工作目录中的错误更改。
这样,您就可以用git-rebase完成重新基址了——继续
祝你好运
还值得注意的是,提交中的更改可能不是非常原子化的。如果删除与其他更改是分开的,那么在交互式重新基址期间删除有问题的提交就是一个简单的问题