git 为什么要先commit,然后pull,最后再push?而不是commit然后直接push?
情况是这样的,现在远程有一个仓库,分支就一个,是master。然后我本地的仓库是从远程的master上clone下来的。大家都是clone下来,再在自己本地改好,再commit然后pull然后push,大家都是这么做的。那么现在问题来了:
1,那我本地这个也算是个分支?还是就是一个本地仓库?
答:本地和远程的关系相当于两个分支,你感觉一样是因为你git pull
的时候已经自动给绑定好对应关系了, set-upstream..balbala
2,如果我在远程新建了个分支,然后我pull了下来,那我本地到底有分支这个说法吗?我本地的分支是不是就是那个远程新建的分支?
答:你远程新建了一个分支拉到本地的道理是一样的,属于复制了一份,但是本地分支和远程分支已经是两个东西了
3,本地仓库和本地分支有什么区别?
答:本地分支属于本地仓库里,是包含关系,一个仓库里可以有很多分支
4,commit是提交到本地仓库,然后push,这个push是把所有代码推到远程仓库,还是只是把commit的地方推到远程仓库?
答:肯定不会全量推送到远程的,是通过对比 commit 的记录,如果本地高于远程就直接把多出来的commit
给怼上去,如果本地分支的最新版本和远程的 commit
有冲突,就需要解决冲突。
5,那为什么要先commit,然后pull,然后再push,我pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?
答:这个先 commit 再 pull 最后再push 的情况就是为了应对多人合并开发的情况,
commit
是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;pull
是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码,然后在git add && git commit && git pull
这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有
commit
操作,他先自己写了东西,然后git pull
这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push
那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的
6,两个分支A和B,A合并B和B合并A,有区别吗?
答:两个互相合并的唯一区别就是 A->B 的时候 B 分支上会产生一个 merge_commit ,被改变的分支是 B ;如果现在没有发生任何改动执行 B->A ,则A和B两分支才会完全相同。
git 为什么要先commit,然后pull,最后再push?而不是commit然后直接push?的更多相关文章
- 【Git版本控制】为什么要先commit,然后pull,最后再push?而不是commit然后直接push?
情况是这样的,现在远程有一个仓库,分支就一个,是master.然后我本地的仓库是从远程的master上clone下来的.大家都是clone下来,再在自己本地改好,再commit然后pull然后push ...
- github commit, issue, pull request, project
1 github的提供给用户操作和交流的几个对象 commit, issue, pull request and project 2 commit and commit comment commit就 ...
- [git] 如何处理push失败的commit
在使用git及github时,遇到一个问题:commit了一个超过100M的大文件,然后在push时失败,然后就再也无法push了,本地大文件删除了,再commit,再push也还是提示有大文件提交. ...
- Git error on commit after merge - fatal: cannot do a partial commit during a merge
Git error on commit after merge - fatal: cannot do a partial commit during a merge this answer is : ...
- git怎么fork一个仓库并pull request
一.使用git push <-----------就是这个玩意 1.设置用户信息 当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址. 这样做很重要,因为每一个 Git 的提交都会 ...
- Git commit 信息标准和丢弃必须要的commit
/***************************************************************************** * Git commit 信息标准和丢弃必 ...
- ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码
ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码: 1:问题现象: hlp@hlp:~/code/github_code/catch_imooc1$ git ...
- git push 时发生 error: failed to push some refs to 错误 (解决办法)
出现问题的原因:在github上更新了README.md,没有更新到本地仓库.而在本地git仓库又修改了文件,这时使用 git push origin master 推送到远程仓库后就出现了下面的问题 ...
- git push报错error: failed to push some refs to 'git@github.com'
git push报错error: failed to push some refs to 'git@github.com' $ git push -u origin master To git@git ...
随机推荐
- 第一篇博客 C+++知识点总结一
1.成员 1.比较特殊的成员类型:protected. 保护成员在本类中和private类型的成员作用一模一样.区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问. 2 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- 2653 区间xor
前言 这个题目在我之前那篇c++位运算的的随笔中提到过. 有兴趣的话去看看吧! 飞机场:https://www.cnblogs.com/laoguantongxiegogofs/p/12444517. ...
- windows服务搭建与删除简单介绍
安装windows服务: 1 VS的开发命令使用管理员权限打开, 2 installutl.exe /servicename="服务名称" "服务地址" 卸载 ...
- h5 移动端适配方案思考
基础概念 CSS像素(CSS pixels) 这个是浏览器使用的抽象单位,用来精确度量网页上的内容.平时经常写的width:100px;height:100px;都是与设备无关的. 设备独立像素(de ...
- AspNetCore3.1源码解析_2_Hsts中间件
title: "AspNetCore3.1源码解析_2_Hsts中间件" date: 2020-03-16T12:40:46+08:00 draft: false --- 概述 在 ...
- 工作5年了还说不清bean生命周期?大厂offer怎么可能给你!
第一,这绝对是一个面试高频题. 比第一还重要的第二,这绝对是一个让人爱恨交加的面试题.为什么这么说?我觉得可以从三个方面来说: 先说会不会.看过源码的人,这个不难:没看过源码的人,无论是学.硬背.还是 ...
- C/C++、C#、JAVA(二):基本类型和转换操作
基本类型和转换操作 数据类型 C语言中的基本类型如下. 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 si ...
- Jmeter中使用MD5方法
在现在这家公司做测试的项目有用到鉴权,token的生成方式有使用到md5,具体的请求url和入参就不方便透露,讲一讲使用方法吧! 自带的Jmeter插件中是没有这个md5的所以,我们可以 (1)打开选 ...
- 13.unittest扩展