![54987e09e42cfa8975f1b130f32278cd.gif](https://i-blog.csdnimg.cn/blog_migrate/9894c73232636f1db56d5986ae8be694.gif)
点击上方蓝字关注我们吧~
一、远程基本操作
基本的配置远程仓库有两个命令:
git remote add origin git@github.com:ZXZxin/gitlearn.git
;git push -u origin master
;
这里先演示环境搭建,也就是和github
上一个仓库远程关联起来,这里遇到了一些坑,记录一下:
![53acf8ef778bf25dbdfde92631f78cf8.png](https://i-blog.csdnimg.cn/blog_migrate/6dd3b9e17a382d6ce2e950c02a3ff7c5.jpeg)
坑解决的两篇文章:
blog.csdn.net/yemoweili
blog.csdn.net/uotail/ar
jingyan.baidu.com/artic
普及:
可以使用
git remote show origin
,查看详细的远程remote信息(注意origin
是一个别名,不一定要这个名字)git commit am '....'
只会将已经纳入版本库的文件add
并提交,新增的文件不会add
。
二、协作
一开始master
和origin/master
一样。
![1fd9b19fe19db2a476919b8cf4e60b6e.png](https://i-blog.csdnimg.cn/blog_migrate/fc59979a90f8ecae64abc7c56eaf2695.jpeg)
然后我们需要再调用一次git push
来同步远程,这样id
就会相同了。
![e1d8ea752ca8a497fbc9107ab65de90a.png](https://i-blog.csdnimg.cn/blog_migrate/07096a0b05a62f7e33030833eb538666.jpeg)
解释:
git
内部会自己维护origin/master
这个分支,我们不能操作,但是可以执行git checkout origin/master
,虽然这个命令不会报错,但是我们实际上只是切换到了提交的那个点(commit-id
)的位置上,也就是和之前那个游离的状态一样。我们可以在这个commit-id
位置上进行修改,但是切换的时候要先stash
一下。
来看一下上面的原理和过程:
初始状态:
![02e2ddf6a5a943366d1315227cbb873f.png](https://i-blog.csdnimg.cn/blog_migrate/88c11ad5418e503ceb5a2e3a58c68bf2.jpeg)
然后我们调用了增加或者修改元素,调用git add
和git commit
之后(这时候还没有push
),就会变成下面这样: (这时候git会告诉我们master
比origin/master
提前了一步)
![fbeaa8ad257f3ba91dd1013d7638be13.png](https://i-blog.csdnimg.cn/blog_migrate/82ab8d7890d5d950b944719c9fd90222.jpeg)
然后我们调用git push
,注意这个过程做了两步:
将本地的内容push到远程了;
将
origin/master
由上面的①
指向了②
;
![14fc3812e1a41ebf102c3a9d43071801.png](https://i-blog.csdnimg.cn/blog_migrate/7b42c06565c57014ad49f467188c76b3.jpeg)
三、Git协作实战
模拟环境:
有两个人协作,一个张三,一个李四,张三的仓库就是我们之前用的那个
gitlearn
,李四是直接从张三的远程仓库git clone
下来的;然后我们再将张三的
gitlearn
和李四的gitlearn2
都设置一下user.name
和user.email
;
李四先git clone
下来:
![3bb5a6d8630b4e9d97792eb1ccdd74be.png](https://i-blog.csdnimg.cn/blog_migrate/6bdd42a7cb4060a943889eca36c29b8d.jpeg)
然后将张三和李四的用户名和密码配置一下:
![d0904954c9ed7e7902fb2a22eb14b7f0.png](https://i-blog.csdnimg.cn/blog_migrate/b97622d05a1d05c3b91d56b5670d56a5.jpeg)
现在我们在gitlearn
添加一个c.txt
文件,然后git push
到远程仓库,然后在gitlearn2
这边输入git remote show origin
来查看区别:
![246ae6f7fe9cad4dfdf661d5c07c49f9.png](https://i-blog.csdnimg.cn/blog_migrate/fb8a30825c10bf2a23fda22093bdf495.jpeg)
remotes/origin/HEAD -> origin/master
啥意思呢?
在clone完成之后,Git 会自动为你将此远程仓库命名为origin
(origin
只相当于一个别名,运行git remote –v
或者查看.git/config
可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名)
这样的形式表示远程分支,所以origin/master
指向的是一个remote branch
(从那个branch我们clone数据到本地)
也就是origin/master
是用来追踪远程分支的。
然后我们在gitlearn2
里面执行git pull
,将远程的最新更新拉去过来。查看最新的更新信息。
![ee35c1f43a52bcfb58682909fd078359.png](https://i-blog.csdnimg.cn/blog_migrate/2edb24dac37ba08c6c4f5d8a46d52cba.jpeg)
上图的过程:
![8eab13f13a18635dc35752caf5abf832.png](https://i-blog.csdnimg.cn/blog_migrate/7e0343bf5348e5e05cd688e7622c1213.jpeg)
下面展示会发生冲突的情况:
张三先修改了
a.txt
的第二行,然后push到了远程;李四也修改了
a.txt
的第二行,然后也想push到远程,就会报错;
![c348a5c2153863c64000b9dd121a96e7.png](https://i-blog.csdnimg.cn/blog_migrate/d68111058f6566c1faf51fd2f1655bbe.jpeg)
此时李四要先git pull
。
现在展示李四的操作:
![d2bc9d21cc0cf2297592ed2037d7f412.png](https://i-blog.csdnimg.cn/blog_migrate/b69f50304169a21722a0eeda08d62508.jpeg)
但是此时还不够,我们需要调用git add
来标识已经解决了冲突;
![d0f5c7c7291f81f689f7e5bbe44c9bc7.png](https://i-blog.csdnimg.cn/blog_migrate/c5d7b227859e746695ede1632ede4992.jpeg)
总结
git add
的三个作用:
将未追踪的文件(新建的文件)加入到暂存区;
将已追踪的文件(修改的文件)加入到暂存区;
解决完冲突之后,调用
git add
标识这个文件已经解决了冲突(git merge
的时候)。
此时我们还需要将解决冲突之后的代码git push
到远程.
![021ea74ce2c535045d099d391dc659dd.png](https://i-blog.csdnimg.cn/blog_migrate/df415d9513d8522a51163f6673fbc0a0.jpeg)
整个过程的流程:
![83c97500ad080e699aa4f1c910e96f33.png](https://i-blog.csdnimg.cn/blog_migrate/91d2ecc41a8f0d15b82e10e1e690d1c1.jpeg)
一般在git push
之前都要进行git pull
操作。git pull = git fetch + git merge
。
git fetch
会直接将代码拉到origin/master
,但是和当前本地的master
不会冲突。但是git merge
就会产生冲突。
下面展示分别使用git fetch
和git merge
来操作:
先使用git fetch
,不会产生冲突:
![cdc8f3304caa6a1028b9ecf0fa57c072.png](https://i-blog.csdnimg.cn/blog_migrate/5ba47d4da1a41e251fe1f4f891bd5de1.jpeg)
接下来我们在李四这边使用git merge
手动解决冲突并push
:
![2fcb9fbbfe2bd6c3aabdffe04ea3206a.png](https://i-blog.csdnimg.cn/blog_migrate/7865ced0790810b6be56fe2cbab254fd.jpeg)
最后在张三也进行git pull
即可。
关于远程git
分支,远程(注意不是本地分支)通常有如下几种:
1、
master
分支: 很稳定的分支;2、
test
分支: 测试分支;3、
develop
分支: 变化最频繁的分支;s4、
hotfix
分支: 紧急bug需要修复;
Java架构宝典
技术学习 / 经验分享
让自己每天都在进步
点亮 ,告诉大家你也在看