【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的分支上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章