Git中先提交再切分支与先切分支再提交是否存在差异?
Git操作流程差异对比
这个问题问得很到位!咱们来把这两个操作流程在Git层面的核心差异掰扯清楚:
核心差异概述
这两个流程最关键的区别体现在develop分支的最终状态和新分支的提交基础上:
- 流程一结束后,你的
develop分支会包含刚提交的修改;流程二结束后,develop分支完全没变化,修改只存在于新分支fix/new_branch中。 - 流程一的新分支是基于已包含新提交的develop创建的;流程二的新分支则是基于未提交修改的原始develop创建的。
分步拆解每个流程的Git内部变化
流程一:先在develop提交,再切分支推送
git add somefiles:在当前develop分支下,把修改的文件加入暂存区。git commit:在develop分支生成一个新的提交(假设哈希值为abc123),此时develop的HEAD指针会指向这个新提交。git checkout -b fix/new_branch:基于develop当前的HEAD(也就是abc123)创建并切换到fix/new_branch,此时这个新分支和develop指向同一个提交节点。git push origin fix/new_branch:把新分支同步到远程仓库。
最终状态:本地的develop和fix/new_branch都包含这个新提交,远程仓库的fix/new_branch也同步了该提交。
流程二:先切新分支,再提交推送
git checkout -b fix/new_branch:基于develop当前的原始状态(未提交修改的那个提交,假设哈希值为def456)创建并切换到fix/new_branch。git add somefiles:在新分支下暂存修改的文件。git commit:在fix/new_branch上生成新提交ghi789,此时新分支的HEAD指向ghi789,但develop的HEAD仍然停留在def456。git push origin fix/new_branch:把新分支同步到远程仓库。
最终状态:只有本地和远程的fix/new_branch包含这个新提交,develop分支和操作前完全一致。
后续影响的场景举例
比如之后你要把fix/new_branch合并回develop:
- 流程一的情况:因为
develop已经有这个提交了,合并操作基本是“无事可做”的快速合并,不会产生新的合并记录。 - 流程二的情况:你需要把
fix/new_branch上的提交合并到develop,这会触发常规的合并操作(默认会生成合并提交,或者你可以选择变基)。
内容的提问来源于stack exchange,提问作者Jed Cua
相关产品推荐
相关产品推荐

