git rebase 不包含所有文件

git rebase doesn't contain every files

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

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

有办法把文件从master传到我的branch吗?我认为只需创建一个新分支即可解决问题。

你检查过master分支中是否存在该文件吗?再次检查您当前的分支是否是主分支。

因为你告诉文件还在 master 上,你可以简单地从 master 获取文件并提交它:

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

注意破折号周围有空格“--”,这样即使文件被删除,git也可以将破折​​号右侧的部分视为文件名。

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

如果你想拥有一个干净的历史,可以尝试撤销删除:

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

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

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

git rebase -i abcdef123456^

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

您将获得一份手册,其中包含您自删除文件以来所做的所有提交。最上面的是 abcdef123456,看起来像

pick abcdef12

从“选择”改为“编辑”,保存,退出编辑器。 git 将开始变基并在第一次提交后停止。

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

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

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