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




