【问题标题】:git rebase doesn't contain every files [duplicate]git rebase 不包含每个文件[重复]
【发布时间】:2021-06-27 00:41:39
【问题描述】:

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

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

是否可以将文件从 master 获取到我的分支?我认为只需创建一个新分支即可解决问题。

【问题讨论】:

    标签: git git-branch git-rebase


    【解决方案1】:

    既然你告诉文件还在 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
    

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

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

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

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

    【讨论】:

      【解决方案2】:

      您是否检查过该文件是否存在于 master 分支中?仔细检查您当前的分支是否是主分支。

      【讨论】:

      • 是的,我检查了,文件存在于master中,但不在我的分支中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2017-07-22
      • 2017-01-11
      • 2011-05-07
      • 2012-08-11
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多