【Git】pull 和 push

老规矩这篇文章讲的什么先列出来,如果觉得自己都了解,就不要在这里浪费时间,研究别的技术,如果。(我只有一个要求禁止转载,发文章是为了让大家学习,最讨厌抄的满网都是,你可以不喜欢吃这个蛋糕但请你不要弄脏它)

git push 的完整写法是?
为什么我们能直接用git push呢?
git pull 的完整写法是?
如何删除github上的分支?
如何使本地分支名与github上的分支名不一样?
pull 与 push的过程中分支版本的变化
Case1
Case2

git push 的完整写法是?

git push origin src:dest
这里的origin是你的远程库的别名,这个src是本地分支的名字 dest代表的是远程分支的名字

为什么我们能直接用git push呢?

因为我们用 git checkout -b test origin/test的时候已经进行了关联,具体的看一下case1

git pull 的完整写法是?

git pull origin src:dest
这个地方注意一下,pull与push都是从源到目的,但是pull是拉 源就是远程分支 目的地就是本地分支

如何删除github上的分支?

git push origin :develop
这里注意一下 :前面是有一个空格的。也就是意味着把本地的一个空分支推送到远程的develop分支上,也就是删除远程的分支
还有一种就是 git push origin --delete develop(他们两个是有区别的)

如何使本地分支名与github上的分支名不一样?

git push --checkout origin develop:develop2
develop是本地的分支 develop2是远端的分支
但是如果不同名会有一个问题,下一次你还想推送到develop2上时会报错 具体的看一下case2

在这里插入图片描述
首先由A创建项目并上传到Github这样远程仓库就有了第一套的配置文件,这个时候B再从远程端拉取代码,这样A和B就有了相同的代码。
然后B在本地进行修改代码,然后上传代码也就是我们的push操作,如果其他人没有push代码此时一定会成功的,这样远程端的代码就被更新成B修改之后的代码了
然后我们A也想进行开发这个时候就需要将远程端的代码拉取下来,这时候就出现了两个情况:

  1. 如果修改的文件跟A在本地修改的没有任何的关系,这个时候就会直接merge到本地的master上,这样也就不会报错,然后A再将代码推送到远端这样远程版本库就有了A的两次提交B的一次提交。
  2. 如果修改的文件跟A在本地修改的有关系,这个时候就会报错,这个时候就需要我们在本地进行一个手动的merge,也就是我们所谓的解决冲突,然后A再把代码提交到远端

pull 与 push的过程中分支版本的变化

在这里插入图片描述
首先会有三个分支 一个是本地 的master分支 一个是本地的origin/master
还有一个是远程的master分支,在进行pull操作的时候会将远程的master上的修改都拉取到本地,同时将远程master上最新的一次提交的commitID对应到本地的origin/master上,如果直接合并的话就直接讲远程的master的修改直接合并到本地master的修改

如果进行push操作,首先会将origin/master的commitID指向本地的master分支上,就相当于将origin/master上向前走了几个提交 然后我们再将本地master推送到远端的master上
*我们如何与远程的master进行比较,都是通过本地的origin/master

case1:张三本地创建了一个分支,将当前分支推送到了远端并通过

git push --setupstream origin 本地分支名 (详细的看git refspec)
这个命令跟git push -u origin master 差不多尽量用上面那个
创建了一个远程的分支,但是李四在本地并没有这个分支此时如果拉取代码会发生什么?
Re:李四执行 git pull会出现以下这种情况
在这里插入图片描述
也就是一个新的branch develop 与本地的origin/develop进行关联,现在我们来查看一下本地的分支
git branch -av
在这里插入图片描述
发现没有本地的develop分支,所以我们就新建一个
git checkout -b develop origin/develop
这样的话我们不仅新建了一个分支我们还跟远端的origin/develop分支进行了关联,我们再看一下相关信息
在这里插入图片描述
注意倒数第二个分支,这样我们就有了远程分支
如果采用上面这种方法我们在git checkout -b test origin/test这个地方需要给本地分支起个名字,但是太麻烦怎么办?
git checkout --track origin/test
这样就可以了他会自动创建一个跟远程分支一样的名字在本地,相当于一种简写吧

case2:如果之前从本地的develop分支提交到了远程的develop2分支,这里我们认为我们创建了关联,理论上说是这样的,所以我们第二次认为直接git push就可以了,这里有一个误区。git push 只是把当前所在的分支推送到远程所对应的分支,名字默认是相同的,但是明显现在不同,所以一定会报错。这个时候我们一定要推送到远程的develop2上我们这么做

git push origin HEAD:develop2
为什么这么写?我们先说一下HEAD,HEAD指向的是当前分支,而当前分支指向的是最新的那次提交,所以HEAD就是指向那次提交,所以现在就很明了了,就是把当前的最新的提交提交到远程的develop2的分支上

发布了14 篇原创文章 · 获赞 14 · 访问量 291

猜你喜欢

转载自blog.csdn.net/weixin_43071838/article/details/104423819