Git远程协作和分支

一、远程基本操作

基本的配置远程仓库有两个命令:

  • git remote add origin git@github.com:ZXZxin/gitlearn.git
  • git push -u origin master

这里先演示环境搭建,也就是和github上一个仓库远程关联起来,这里遇到了一些坑,记录一下:

坑解决的两篇文章:

  • blog.csdn.net/yemoweili
  • blog.csdn.net/uotail/ar
  • jingyan.baidu.com/artic

普及:

  • 可以使用git remote show origin,查看详细的远程remote信息(注意origin是一个别名,不一定要这个名字)
  • git commit am '....'只会将已经纳入版本库的文件add并提交,新增的文件不会add

二、协作

一开始masterorigin/master一样。

然后我们需要再调用一次git push来同步远程,这样id就会相同了。

解释:

git内部会自己维护origin/master这个分支,我们不能操作,但是可以执行git checkout origin/master,虽然这个命令不会报错,但是我们实际上只是切换到了提交的那个点(commit-id)的位置上,也就是和之前那个游离的状态一样。我们可以在这个commit-id位置上进行修改,但是切换的时候要先stash一下。

来看一下上面的原理和过程:

初始状态:

然后我们调用了增加或者修改元素,调用git addgit commit之后(这时候还没有push),就会变成下面这样: (这时候git会告诉我们masterorigin/master提前了一步)

然后我们调用git push,注意这个过程做了两步:

  • 将本地的内容push到远程了;
  • origin/master由上面的指向了

三、Git协作实战

模拟环境:

  • 有两个人协作,一个张三,一个李四,张三的仓库就是我们之前用的那个gitlearn,李四是直接从张三的远程仓库git clone下来的;
  • 然后我们再将张三的gitlearn和李四的gitlearn2都设置一下user.nameuser.email

李四先git clone下来:

然后将张三和李四的用户名和密码配置一下:

现在我们在gitlearn添加一个c.txt文件,然后git push到远程仓库,然后在gitlearn2这边输入git remote show origin来查看区别:

remotes/origin/HEAD -> origin/master 啥意思呢? 在clone完成之后,Git 会自动为你将此远程仓库命名为originorigin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地) 也就是origin/master是用来追踪远程分支的。

然后我们在gitlearn2里面执行git pull,将远程的最新更新拉去过来。查看最新的更新信息。

上图的过程:

下面展示会发生冲突的情况:

  • 张三先修改了a.txt的第二行,然后push到了远程;
  • 李四也修改了a.txt的第二行,然后也想push到远程,就会报错;

此时李四要先git pull

现在展示李四的操作:

但是此时还不够,我们需要调用git add来标识已经解决了冲突;

总结git add的三个作用:

  • 将未追踪的文件(新建的文件)加入到暂存区;
  • 将已追踪的文件(修改的文件)加入到暂存区;
  • 解决完冲突之后,调用git add标识这个文件已经解决了冲突(git merge的时候)。

此时我们还需要将解决冲突之后的代码git push 到远程.

整个过程的流程:

一般在git push之前都要进行git pull操作。 git pull = git fetch + git merge

git fetch会直接将代码拉到origin/master,但是和当前本地的master不会冲突。但是git merge就会产生冲突。

下面展示分别使用git fetchgit merge来操作:

先使用git fetch,不会产生冲突:

接下来我们在李四这边使用git merge手动解决冲突并push

最后在张三也进行git pull即可。

关于远程git分支,远程(注意不是本地分支)通常有如下几种:

  • 1、master分支: 很稳定的分支;
  • 2、test分支: 测试分支;
  • 3、develop分支: 变化最频繁的分支;s
  • 4、hotfix分支: 紧急bug需要修复;

本文分享自微信公众号 - Java程序猿部落(ydsy-love)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法半岛

LeetCode-31 下一个排列

今天我们学习第31题下一个排列,这是一个中等的数组题。我们先看看这道题的题目描述。

10940
来自专栏呼延

[设计模式] 责任链模式

使多个对象都有机会处理请求,从而避免请求的发送者与接受者之间的耦合关系. 将多个接受者连成一条链,沿着该链处理请求,直到请求被处理为止.

13250
来自专栏算法半岛

LeetCode-7 整数反转

今天我们学习第7题整数反转,这是个简单的数学题。下面我们看看这道题的题目描述。

10530
来自专栏呼延

Java8 Date Time 使用案例

对日期及时间的处理,我们都不陌生,但是总会有你不熟悉的新需求产生,毕竟产品经理的奇思妙想是很多的.

11310
来自专栏算法半岛

LeetCode-21 合并两个有序链表

今天我们学习第21题合并两个有序链表,这是一道简单题。下面我们看看这道题的题目描述。

10630
来自专栏木二天空

003.Ansible基础使用

Ansible命令行执行方式有:Ad-Hoc、Ansible-playbook两种,Web方式其官方提供付费产品Tower。Ad-Hoc主要用于临时命令的执行,...

16520
来自专栏算法半岛

LeetCode-33 搜索旋转排序数组

( 例如,数组 [0,1,2,4,5,6,7]可能变为 [4,5,6,7,0,1,2] )。

20830
来自专栏算法半岛

LeetCode-28 实现strStr()

今天我们学习第28题实现strStr(),这个题目是一个典型的字符串匹配题目。我们先看看这道题的题目描述。

11730
来自专栏算法半岛

LeetCode-17 电话号码的字母组合

今天我们学习第17题电话号码的字母组合,这是一道中等题。像这样字符串的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们...

12020
来自专栏算法半岛

LeetCode-24 两两交换链表中的节点

今天我们学习第24题两两交换链表中的节点,这是一道中等题。像这样链表的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们...

6620

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励