在GIT中,如何从包含其他更改的提交中删除文件删除?
我做了一个GIT承诺。此提交包含多个更改,包括文件删除 此后,我作出了其他承诺 所有提交都已推送,并打开一个请求以供审查(尚未批准或合并) 现在我想从上一次提交中删除文件delete。这是我唯一想撤销的事情。也就是说,我希望保留以前提交中的所有其他更改在GIT中,如何从包含其他更改的提交中删除文件删除?,git,Git,我做了一个GIT承诺。此提交包含多个更改,包括文件删除 此后,我作出了其他承诺 所有提交都已推送,并打开一个请求以供审查(尚未批准或合并) 现在我想从上一次提交中删除文件delete。这是我唯一想撤销的事情。也就是说,我希望保留以前提交中的所有其他更改 如何执行此操作?您可以从分支机构还原特定的佣金 git revert commitid 提交id可以从gitk中找到。您可以从分支还原特定的提交id git revert commitid 提交id可以从gitk中找到。如果尚未推送,请尝试以
如何执行此操作?您可以从分支机构还原特定的佣金
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}是问题前的提交。然后基本上可以重新执行整个提交,在再次提交之前,根据需要撤消
我希望你没有推 如果您只想撤消删除操作,那么退出就很容易了
git签出委员会文件名
之后,文件就在您的工作目录中了如果您只想撤消删除操作,那么很容易处理
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 commitP
替换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