Git如何分两次提交推送不同文件:先B、C后移动的A?
分步实现两次提交的Git操作
这事儿很简单,有两种常用方法能搞定你的需求,我都给你拆解清楚:
方法一:用git commit --only直接提交指定文件(推荐,更快捷)
因为你已经把B.txt和C.txt加入暂存区了,直接用这个命令就能精准提交这两个文件的变更,完全不影响暂存区里A.txt的移动操作:
- 执行提交命令:
git commit --only B.txt C.txt -m "feat: update B.txt and C.txt"小提示:这个命令的作用是专门提交你指定的文件,暂存区里的其他变更(也就是A.txt的移动)会原封不动保留着,不会被提交
- 推送第一次提交到远程:
git push - 现在暂存区还留着A.txt的移动变更,直接提交它:
git commit -m "refactor: move A.txt to someDirectory/" - 推送第二次提交到远程:
git push
方法二:手动调整暂存区(适合理解Git暂存区原理)
如果你想手动控制暂存区的内容,或者你的Git版本低于2.23(没有git restore命令),可以用这种方法:
- 先确认当前状态,看看暂存区里的内容:
你会看到A.txt的移动、B和C的修改都在暂存区里git status - 把A.txt的移动变更从暂存区移除,放回工作区:
# Git 2.23+ 用这个 git restore --staged A.txt someDirectory/A.txt # 旧版本Git用这个 git reset HEAD -- A.txt someDirectory/A.txt - 再次执行
git status确认:此时暂存区只有B和C的变更,A的移动会显示在未暂存区域 - 提交B和C的变更:
git commit -m "feat: update B.txt and C.txt" - 推送第一次提交:
git push - 把A的移动变更重新加入暂存区(Git会自动识别这是移动操作,不用管原A.txt的删除):
git add someDirectory/A.txt - 提交A的移动操作:
git commit -m "refactor: move A.txt to someDirectory/" - 推送第二次提交:
git push
额外小提示
如果不想分两次推送,也可以等两次提交都完成后,只执行一次git push,Git会把本地的两次提交一次性推送到远程,效果和分两次推送是一样的~
内容的提问来源于stack exchange,提问作者Irbis
相关产品推荐
相关产品推荐

