git commit和push操作是对文件进行覆盖还是在原文件的基础内容上追加或删除一些东西呢?
git add命令提交到暂存区
git commit提交到本地仓库分支时以及push到远程分支时,是用修改后的文件覆盖原来的文件,还是说会对比两个文件的不同,在原来的文件上进行删除或修改一些信息?
引发以下两个问题:
1:假设两个人A,B同时修改同一个分支的同一份文件,A先修改完成提交到远程分支,B后完成,在提交到远程分支之前没有拉一下最新的分支代码,他直接提交,这样A的代码会被覆盖掉吗?也就是说A白写了?如果这两人又是修改的同一行代码,会不会冲突?
2:假设多版本并行开发,A,B两个人的需求都是对同一个文件修改,A负责27号分支,B负责29号分支,27号发版合到master分支以后,如果B不重新拉一下master分支,那么29号这个分支如果发版喝道master分支,会不会导致之前A写的功能没了?
回答:
远程一般不会自动 merge (即使没有冲突),会直接 push 失败。必须本地 merge 好了,把所有冲突解决了,才可以推到远程。
可以加 -f 强行 push ,这个时候也不会解决任何冲突,而是用本地分支直接覆盖远程。这个操作非常危险,容易造成不可挽回的损失,所以很多时候会禁止 push -f ,或者在某些分支上禁止。
回答:
有一个误解就是,Git
提交的时候是需要合并代码才可以推送到远程仓库的。
而如果说使用 push -f
和使用 rebase
出错的话,就会把另外一个人的提交给覆盖掉。
所以并行开发时,分支合并的时候都是需要有一个对于业务理解比较全面的人去操作,一般都是项目组长。直接交给组员合并的话,就会出现一些事故,比如说合并丢代码。
一般单线开发时就没有这样的问题了,提交之前会要求你拉去远端数据的,同步过来之后在本地解决完冲突才可以提交到远程仓库。不过一般都不会有冲突,安排的开发任务应该是错开功能模块的。
如果觉得提交日志比较难看,才会使用到 rebase
去合并一些 commit
,但也是不推荐让组员随意合并。
以上是 git commit和push操作是对文件进行覆盖还是在原文件的基础内容上追加或删除一些东西呢? 的全部内容, 来源链接: utcz.com/p/944746.html