git - git rebase 不包含所有文件
问题描述
我错误地在我的分支中使用了“git rm my_file”。
经过一些提交、合并和......现在我试图从主分支取回文件,我正在使用“git rebase master”,它说当前分支是最新的,但文件不存在。
无论如何要将文件从 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。然后对该提交的父级进行交互式变基:
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
...您的删除将被撤消。
推荐阅读
- reactjs - 响应中的 Spotify 播放器 SDK
- c# - 遇到 WPF ComboBox SelectionChanged 事件触发器的奇怪行为:在创建 UserControl 时触发或根本不触发
- linux - 是否可以使用 jmeter 对托管在 linux 服务器中的应用程序进行负载测试?
- r - R中矩阵中的字符串操作
- swift - 使用 UIkit 的 Swift 中的菜单按钮
- python - 如何从 openweathermap.org 获取每小时天气?
- c - 我的代码中的 fread() 出了什么问题?
- android - Android Glide 库 LicenseCheckError/DeadObjectException
- git - 如何使用命令行删除目录?
- terraform - Terraform:如何为所有声明的模块提供一个通用输出?