在GIT中,如何从包含其他更改的提交中删除文件删除?

在GIT中,如何从包含其他更改的提交中删除文件删除?,git,Git,我做了一个GIT承诺。此提交包含多个更改,包括文件删除 此后,我作出了其他承诺 所有提交都已推送,并打开一个请求以供审查(尚未批准或合并) 现在我想从上一次提交中删除文件delete。这是我唯一想撤销的事情。也就是说,我希望保留以前提交中的所有其他更改 如何执行此操作?您可以从分支机构还原特定的佣金 git revert commitid 提交id可以从gitk中找到。您可以从分支还原特定的提交id git revert commitid 提交id可以从gitk中找到。如果尚未推送,请尝试以

我做了一个GIT承诺。此提交包含多个更改,包括文件删除

此后,我作出了其他承诺

所有提交都已推送,并打开一个请求以供审查(尚未批准或合并)

现在我想从上一次提交中删除文件delete。这是我唯一想撤销的事情。也就是说,我希望保留以前提交中的所有其他更改


如何执行此操作?

您可以从分支机构还原特定的佣金

git revert commitid

提交id可以从
gitk

中找到。您可以从分支还原特定的提交id

git revert commitid

提交id可以从
gitk

中找到。如果尚未推送,请尝试以下操作:

git reset --soft {commit tag or hash}
其中{commit tag或hash}是问题前的提交。然后基本上可以重新执行整个提交,在再次提交之前,根据需要撤消


我希望你没有推

如果尚未按下,请尝试以下操作:

git reset --soft {commit tag or hash}
其中{commit tag或hash}是问题前的提交。然后基本上可以重新执行整个提交,在再次提交之前,根据需要撤消


我希望你没有推

如果您只想撤消删除操作,那么退出就很容易了

  • 查找执行删除操作的提交id
  • 执行下面的cmd签出文件
    git签出委员会文件名

  • 之后,文件就在您的工作目录中了

    如果您只想撤消删除操作,那么很容易处理

  • 查找执行删除操作的提交id
  • 执行下面的cmd签出文件
    git签出委员会文件名
  • 之后,该文件将位于您的工作目录中

  • 使用
    git log--diff filter=D--summary
    获取所有已删除文件的提交
  • 让我们中断此命令以查看其工作方式
    --diff filter=D
    标志帮助您搜索提及
    删除模式的摘要

  • 使用
    git checkout$commit~1 filename
    还原删除的文件
  • $commit~1
    表示您应该添加提交的名称。类似于
    1D0C9EF6EB4E3948849054370C31C2FF594426C
    其中$commit是命名commit的第n个孙子-

    希望这会有所帮助

  • 使用
    git log--diff filter=D--summary
    获取所有已删除文件的提交
  • 让我们中断此命令以查看其工作方式
    --diff filter=D
    标志帮助您搜索提及
    删除模式的摘要

  • 使用
    git checkout$commit~1 filename
    还原删除的文件
  • $commit~1
    表示您应该添加提交的名称。类似于
    1D0C9EF6EB4E3948849054370C31C2FF594426C
    其中$commit是命名commit的第n个孙子-

    希望这会有所帮助,因为您已经允许其他人看到删除内容

    这不会阻止您放弃这组提交以支持一个新的集合,但如果您这样做,任何其他抓取这些提交的人也必须放弃这组提交以支持一个新集合

    在同一条评论中,您还提到了一个pull请求。拉取请求本质上是一封电子邮件或其他通信消息,上面说:“嘿,我有一些承诺,请现在就接受。”如果可以接受这些承诺的人已经接受了这些承诺,那么您现在就处于这种问题状态。但是,如果他们还没有采取行动,你可以尝试撤回你的拉动请求(也许会成功)。如果是这样的话,你就摆脱了问题的处境

    因此,有两条路径可供选择:

  • 收回损坏的拉取请求,用新的提交集替换坏的提交集,并提出新的拉取请求;或
  • 始终承认错误,保留错误提交,并进行新的额外提交以撤消错误
  • 如果不是太迟的话,第一条路是最好的。第二种方法通常是最好的,如果其他人已经接受了错误的提交,尽管在某些情况下,如果你能找到所有这样做的人,并且他们都同意,你可以让他们都放弃错误的提交,取而代之的是好的提交

    记住,所有Git存储库都包含提交,每个提交都构成存储库中历史记录的一部分。每个提交都有自己的唯一哈希ID-
    badf00d…
    等,并包含上一次提交的唯一ID。这些ID链就是历史:

    A <- B <- C <- D   <-- master
    
    这里
    X
    是错误的提交。我们想用good commit
    P
    替换
    X
    ,这与坏提交类似,只是它不会删除文件。我们不必担心如何进行良好的提交,只要假设您可以进行
    P

    ...--N              <-- origin/branch
          \
           O--X--Q--R   <-- (your pull request), branch
            \
             P
    
    现在我们还需要一个
    R
    的副本,它指向
    Q'
    (同样,也不会在快照中删除该文件):

    只有当其他人还没有接受以
    R
    结尾的错误提交时,“替换请求”才起作用。如果他们有,你必须让他们放弃
    X-Q-R
    序列,转而使用新的
    P-Q'-R'
    序列。如果他们不能或不愿意放弃它,那么最好的办法就是进行一次新的修复提交
    S
    。提交
    S
    只需将删除的文件添加回:其快照与
    R
    的快照相同,但文件已恢复。下面是您现在如何制作
    s
    。只需两个Git命令:

    git checkout origin/branch -- path/to/file
    
    pick 1234567 commit subject for O     # the numbers will vary
    pick c0ffee1 commit subject for X     # these are the hash IDs
    pick badf00d commit subject for Q     # of each commit
    pick cafedad commit subject for R
    pick ....... fix-up: restore accidentally-deleted file
    
    这将从源/分支
    指向的提交(即从提交
    N
    )中提取
    path/to/file
    的版本。(命名任何其他提交,例如,通过其哈希ID,从该特定提交获取文件的版本。)然后:

    提交结果(git签出
    git签出
    
    
    git checkout origin/branch -- path/to/file
    
    # you can probably come up with a better commit message!
    git commit -m "fix-up: restore accidentally-deleted file"
    
    ...--N                 <-- origin/branch
          \
           O--X--Q--R--S   <-- branch
    
    git rebase -i
    
    pick 1234567 commit subject for O     # the numbers will vary
    pick c0ffee1 commit subject for X     # these are the hash IDs
    pick badf00d commit subject for Q     # of each commit
    pick cafedad commit subject for R
    pick ....... fix-up: restore accidentally-deleted file
    
    pick 1234567 commit subject for O
    pick c0ffee1 commit subject for X
    squash ....... fix-up: restore accidentally-deleted file
    pick badf00d commit subject for Q
    pick cafedad commit subject for R
    
    ...--N                <-- origin/branch
          \
           O--X--Q--R     <-- (your old pull request)
            \        \
             \        S   [abandoned]
              \
               P--Q'--R'  <-- branch