首页 > 解决方案 > git rebase 不包含所有文件

问题描述

我错误地在我的分支中使用了“git rm my_file”。

经过一些提交、合并和......现在我试图从主分支取回文件,我正在使用“git rebase master”,它说当前分支是最新的,但文件不存在。

无论如何要将文件从 master 获取到我的分支?我认为只需创建一个新分支就可以解决问题。

标签: gitgit-branchgit-rebase

解决方案


由于您告诉文件仍在 master 上,您可以简单地从 master 获取文件并提交它:

git checkout master -- path-and-name-of-the-deleted-file
git commit

注意它们周围带有空格的破折号“--”让 git 将它们的右边部分视为文件名,即使文件被删除也是如此。

这是最简单的方法,但是在你的提交历史中,这个文件将被删除并重新创建,这不是很漂亮。

如果您想拥有一个干净的历史记录,您可以尝试撤消删除:

找到您删除文件的提交 ID:

git log --name-status --diff-filter=D

假设它是提交 abcdef123456。然后对该提交的级进行交互式变基:

git rebase -i abcdef123456^

(插入符号 ^ 表示父提交)

您将获得自删除文件以来所做的所有提交的剧本。最上面的将是 abcdef123456,看起来像

pick abcdef12

从“pick”更改为“edit”,保存,退出编辑器。git 将启动 rebase 并在第一次提交后停止。

然后从 master 获取文件的当前版本:

git checkout master -- path-and-name-of-the-deleted-file
git commit --amend
git rebase --continue

...您的删除将被撤消。


推荐阅读