You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Git PR相关问题:分支删文件合并影响及撤销修改后合并效果

Git PR合并相关问题解答

问题1:若从某分支删除文件后,向存在该文件的目标分支发起PR,合并后目标分支的该文件会被删除吗?

这得看你具体的删除操作和提交情况:

  • 如果你用git rm file.txt(不带--cached参数)完成文件删除并提交了这个变更,那这个提交里会明确记录“删除该文件”的操作。当PR合并到目标分支后,目标分支里的对应文件会被删除——因为Git会把你的删除操作同步应用到目标分支上。
  • 但如果只是本地手动删了文件却没提交这个变更,或者用git rm --cached file.txt(仅移除Git对文件的追踪,文件实体还留在本地),那你的提交里并没有“删除文件”的操作逻辑。这种情况下合并PR,目标分支里的文件会原封不动保留,不会被删除。

问题2:我拥有一个分支,file.txt在提交历史中被意外修改,该分支还包含其他提交中的其他变更;main分支存在file.txt。我希望向main分支发起PR,展示除file.txt变更外的所有变更,因此执行git rm --cached file.txt并提交。若该PR合并至main分支,main分支上的file.txt是否会保留并继续被追踪?

首先得提一句:你用git rm --cached file.txt的操作其实没完全达到“排除file.txt变更”的目的——这个命令只是让Git停止追踪该文件,并没有撤销file.txt里已有的修改。不过回到你的问题本身:

当这个PR合并到main分支后:

  • file.txt文件本身会保留:因为git rm --cached仅移除Git对文件的追踪关系,并没有删除文件实体,所以仓库里的file.txt不会消失。
  • 但main分支会停止追踪这个文件:合并后的main分支会继承你提交的“移除追踪”操作,之后Git就不会再监控file.txt的变更了。

如果你真正想实现“只合并除file.txt外的所有变更”,更合适的做法是在你的分支里撤销file.txt的修改:

git checkout main -- file.txt

这个命令会用main分支里的file.txt内容覆盖当前分支的对应文件,提交这个撤销操作后再发起PR,合并后main分支的file.txt会完全不受影响,依然保持正常追踪状态,同时其他变更也能顺利合并。

内容的提问来源于stack exchange,提问作者mrflagio

火山引擎 最新活动