日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git按照tag拉取代码_Git实操小课堂

發(fā)布時(shí)間:2024/9/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git按照tag拉取代码_Git实操小课堂 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

平時(shí)也多是使用 IDEA 自帶的 Git 插件,簡(jiǎn)單又方便,不需要理解 Git 背后的技術(shù),最近突然讓我在 VsCode 上更新提交代碼,發(fā)現(xiàn)又需要學(xué)習(xí) VsCode 的插件使用,思量一番后,決定好好學(xué)習(xí)一下 Git 命令的使用。由于工作需要,對(duì)于 Git 的使用又有了新的要求,之前簡(jiǎn)單的 push、pull 命令已經(jīng)無法滿足平常的使用,因此專門找了個(gè)網(wǎng)站實(shí)操了一遍,同時(shí)將相關(guān)內(nèi)容整理成文檔,供后續(xù)翻看。

Git基本操作

以下操作來源:https://learngitbranching.js.org/?locale=zh_CN

commit提交

git commit

Git 倉庫中的提交記錄保存的是你的目錄下所有文件的快照,就像是把整個(gè)目錄復(fù)制,然后再粘貼一樣,但比復(fù)制粘貼優(yōu)雅許多!

有時(shí)你提交過代碼之后,發(fā)現(xiàn)一個(gè)地方改錯(cuò)了,你下次提交時(shí)不想保留上一次的記錄;或者你上一次的 commit message 的描述有誤,這時(shí)候你可以使用接下來的這個(gè)命令:git commit --amend。

查看如下案例:

$ git checkout master $ git cherry-pick C2 $ git commit --amend $ git cherry-pick C3

branch創(chuàng)建分支

git branch newBranchName

創(chuàng)建分支后,然后切換到當(dāng)前新分支下。

git checkout newBranchName

如果你想創(chuàng)建一個(gè)新的分支同時(shí)切換到新創(chuàng)建的分支的話,可以通過 git checkout -b 來實(shí)現(xiàn)。

git checkout -b newBranchName

查看遠(yuǎn)程分支

git branch -r

拉取遠(yuǎn)程分支并創(chuàng)建本地分支

git checkout -b 本地分支名x origin/遠(yuǎn)程分支名x

使用該方式會(huì)在本地新建分支x,并自動(dòng)切換到該本地分支x。采用此種方法建立的本地分支會(huì)和遠(yuǎn)程分支建立映射關(guān)系。

git fetch origin 遠(yuǎn)程分支名x:本地分支名x

使用該方式會(huì)在本地新建分支x,但是不會(huì)自動(dòng)切換到該本地分支x,需要手動(dòng) checkout。采用此種方法建立的本地分支不會(huì)和遠(yuǎn)程分支建立映射關(guān)系。

checkout檢出/切換分支

將指定版本/tag/分支的代碼檢出,如果當(dāng)前存在未提交的代碼禁止做此操作。

merge合并

合并兩個(gè)分支,存在沖突時(shí),能自動(dòng)合并的會(huì)自動(dòng)合并,不能自動(dòng)合并的會(huì)產(chǎn)生沖突,需要人工處 理。解決沖突的時(shí)候,只需要處理沖突的文件,當(dāng)前工作目錄會(huì)存在大量提交的文件,不要去還原這些文件,不要去還原這些文件,不要去還原這些文件。

// 創(chuàng)建bugFix新分支,并切換到該分支 git checkout -b bugFix; //加入做了修改,然后提交 git commit //切換到master分支,然后做修改并提交 git checkout master git commit //將bugFix分支的內(nèi)容合并到master git merge bugFix

分離Head

目標(biāo): 從 bugFix 分支中分離出 HEAD 并讓其指向一個(gè)提交記錄。

執(zhí)行下述命令:

git checkout master git checkout C4

移動(dòng)

// 切換分支到C2的父節(jié)點(diǎn)C1 git checkout C2^

上述 ^ 命令一次只能移動(dòng)一個(gè)位置,比較緩慢。接下來我們學(xué)習(xí)一個(gè)新命令。

移動(dòng)分支可以直接使用 -f 選項(xiàng)讓分支指向另一個(gè)提交。例如:

git branch -f master HEAD~3

上面的命令會(huì)將 master 分支強(qiáng)制指向 HEAD 的第 3 級(jí)父提交。

如何將下圖中右邊的分支修改成左邊的樣式:

$ git checkout HEAD^ $ git branch -f bugFix HEAD^ $ git branch -f master C6

^ 和 ~ 的組合操作

上述三條命令可以簡(jiǎn)化為下面一條命令。

作業(yè):

git branch bugWork HEAD~^2~ 或者 git branch -f bugWork

撤銷變更

主要有兩種方法用來撤銷變更 —— 一是 git reset,還有就是 git revert。

git reset 通過把分支記錄回退幾個(gè)提交記錄來實(shí)現(xiàn)撤銷改動(dòng)。你可以將這想象成“改寫歷史”。git reset 向上移動(dòng)分支,原來指向的提交記錄就跟從來沒有提交過一樣。

將HEAD 的代碼重置到指定版本/tag/分支,重置分成三種,此操作非常危險(xiǎn),非特殊情況禁止此操作

  • soft :軟重置,重置位置,差異代碼會(huì)暫存
  • mixed :混合重置,重置位置,差異代碼不會(huì)暫存
  • hard :硬重置,重置位置和代碼

git reset HEAD~1

雖然在你的本地分支中使用 git reset 很方便,但是這種“改寫歷史”的方法對(duì)大家一起使用的遠(yuǎn)程分支是無效的哦!為了撤銷更改并分享給別人,我們需要使用 git revert。

作業(yè):分別撤銷 local 分支和 pushed 分支上的最近一次提交。共需要撤銷兩個(gè)提交(每個(gè)分支一個(gè))。

記住 pushed 是遠(yuǎn)程分支,local 是本地分支 —— 這么說你應(yīng)該知道用分別哪種方法了吧?

$ git reset local~ $ git checkout pushed $ git revert pushed

作業(yè):

$ git reset HEAD~1 $ git checkout pushed $ git revert HEAD

作業(yè):

// Git 中默認(rèn)的是 --mixed。 git reset --hard o/master git checkout -b feature C2 git push origin feature

上述命令為標(biāo)準(zhǔn)答案,本人通過另一種方式實(shí)現(xiàn)的。

git checkout -b feature git branch -f master C1 git push

cherry-pick復(fù)制

作業(yè):

$ git cherry-pick C3 C4 C7

again:

$ git checkout one $ git cherry-pick C4 C3 C2 $ git checkout two $ git cherry-pick C5 C4 C3 C2 $ git branch -f three C2

stash暫存

將當(dāng)前未提交的代碼存放到一個(gè)暫存區(qū)當(dāng)中,如果你要做以下其他任何操作,但是當(dāng)前存在未提交的代碼

如果開發(fā)完成,則提交后做其他操作

如果沒有開發(fā)完成,則暫存后進(jìn)行其他操作

其他操作完畢后,將暫存區(qū)的代碼恢復(fù)到當(dāng)前工作目錄?;謴?fù)的方式有兩種,一種是應(yīng)用(apply),僅恢復(fù)代碼,不清除暫存區(qū)的內(nèi)容。另一種是彈出(unstash),恢復(fù)代碼并清空暫存區(qū)的代碼。建議使用應(yīng)用(apply**)**。

暫存區(qū)內(nèi)可以暫存多次代碼,恢復(fù)的時(shí)候不要選錯(cuò)。

pull拉取

從服務(wù)器拉取代碼,不指定拉取的分支時(shí)會(huì)使用當(dāng)前分支的上游分支(upstream)。如果當(dāng)前代 碼和服務(wù)器的代碼存在差異,會(huì)自動(dòng)進(jìn)行一次合并,如果存在沖突并且不能自動(dòng)處理,會(huì)有提示要 人工解決,因此即使本地不存在任何未提交的代碼,但是還是會(huì)有可能提示沖突。

git pull 相當(dāng)于 git fetch + git merge

git pull origin foo 相當(dāng)于:

git fetch origin foo; git merge o/foo

還有...

git pull origin bar~1:bugFix 相當(dāng)于:

git fetch origin bar~1:bugFix; git merge bugFix

作業(yè):

git pull origin bar:foo git pull origin master:side

push推送

將當(dāng)前代碼推送到服務(wù)器上,不指定拉取的分支時(shí)會(huì)使用當(dāng)前分支的上游分支(upstream)

git commit git commit git push

git fetch;git rebase o/master;git push

git fetch;git merge o/master;git push

git pull 就是 fetch 和 merge 的簡(jiǎn)寫,類似的 git pull --rebase 就是 fetch 和 rebase 的簡(jiǎn)寫!

進(jìn)階

git push <remote> <place>

git push origin master ,切到本地倉庫中的“master”分支,獲取所有的提交,再到遠(yuǎn)程倉庫“origin”中找到“master”分支,將遠(yuǎn)程倉庫中沒有的提交記錄都添加上去,搞定之后告訴我。

擺脫 git checkout 的束縛,用 git push 實(shí)現(xiàn)下面的目標(biāo)。

$ git push origin master $ git push origin foo

要同時(shí)為源和目的地指定 的話,只需要用冒號(hào) : 將二者連起來就可以了:

git push origin <source>:<destination>

作業(yè):

$ git push origin foo:master $ git push origin C5:foo

Git 有兩種關(guān)于 的用法是比較詭異的,即你可以在 git push 或 git fetch 時(shí)不指定任何 source,方法就是僅保留冒號(hào)和 destination 部分,source 部分留空。

  • git push origin :side刪除遠(yuǎn)程分支

fetch下載

從服務(wù)器上獲取代碼到本地,不進(jìn)行合并。

在上文學(xué)習(xí)了 git push 的參數(shù),很酷的 參數(shù),還有用冒號(hào)分隔的 refspecs( : )。 這些參數(shù)也適用于 git fetch 。他們的概念是相同的,只是方向相反罷了(fetch 是下載,而 push 是上傳)

git fetch origin foo

Git 會(huì)到遠(yuǎn)程倉庫的 foo 分支上,然后獲取所有本地不存在的提交,放到本地的 o/foo 上。

作業(yè):

$ git fetch origin master~:foo $ git fetch origin foo:master $ git checkout foo $ git merge C6

git fetch origin :bugFix在本地創(chuàng)建一個(gè)分支

fakeTeamwork模擬團(tuán)隊(duì)合作

使用 git fakeTeamwork 制造遠(yuǎn)程倉庫的變更,“假裝”你的同事、朋友、合作伙伴更新了遠(yuǎn)程倉庫,有可能是某個(gè)特定的分支,或是幾個(gè)提交記錄。

克隆一個(gè)遠(yuǎn)程倉庫(用 git clone),再在剛創(chuàng)建的遠(yuǎn)程倉庫中模擬一些修改,然后在你自己的本地分支上做一些提交,再拉取遠(yuǎn)程倉庫的變更。

git clone //假設(shè)成員做兩次修改 git fakeTeamwork 2 //本地提交,生成 C4 git commit //更新 git pull

作業(yè):

思路:

  • 克隆你的倉庫
  • 模擬一次遠(yuǎn)程提交(fakeTeamwork)
  • 完成一次本地提交
  • 用 rebase 發(fā)布你的工作
git clone git fakeTeamwork 1 git fetch;git rebase o/master;git push

如果你是在一個(gè)大的合作團(tuán)隊(duì)中工作, 很可能是 master 被鎖定了, 需要一些 Pull Request 流程來合并修改。如果你直接提交(commit)到本地 master, 然后試圖推送(push)修改, 你將會(huì)收到這樣類似的信息:

! [遠(yuǎn)程服務(wù)器拒絕] master -> master (TF402455: 不允許推送(push)這個(gè)分支; 你必須使用pull request來更新這個(gè)分支.)

解決辦法:新建一個(gè)分支 feature, 推送到遠(yuǎn)程服務(wù)器. 然后 reset 你的 master 分支和遠(yuǎn)程服務(wù)器保持一致, 否則下次你 pull 并且他人的提交和你沖突的時(shí)候就會(huì)有問題。

$ git reset HEAD~1 $ git checkout -b feature C2 $ git push

rebase變基/衍合

作業(yè):實(shí)現(xiàn)如下操作

git rebase -i HEAD~4

再來一題:

// 首先將master移動(dòng)到C4分支 $ git branch -f master C4 // 由bugFix切換到master上 $ git checkout master //復(fù)制 $ git rebase -i HEAD~3

二思后新的解題思路:

git rebase bugFix master git rebase -i HEAD~3

again:(不允許使用 cherry-pick)

//首先將master移動(dòng)到C3上 $ git branch -f master C3 //檢出master $ git checkout master$ git rebase -i HEAD~2 $ git rebase -i HEAD~1 $ git rebase -i HEAD~2

另一種解題思路:

$ git rebase -i HEAD~2 $ git rebase -i HEAD~1 $ git rebase -i HEAD~2 $ git rebase caption master

此外著重需要注意下述命令:

git rebase o/master side1 相當(dāng)于 git checkout side1 git rebase o/master

假設(shè) HEAD 在 foo 分支節(jié)點(diǎn)上(foo*標(biāo)識(shí)),如果想要將 master 移動(dòng)到 foo 所在的節(jié)點(diǎn)上,并且檢出,則可以通過一條命令來實(shí)現(xiàn)。

git rebase foo master

tag

分支很容易被人為移動(dòng),并且當(dāng)有新的提交時(shí),它也會(huì)移動(dòng)。分支很容易被改變,大部分分支還只是臨時(shí)的,并且還一直在變。Tag 可以永遠(yuǎn)指向某個(gè)提交記錄的標(biāo)識(shí)呢,比如軟件發(fā)布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性。

它們并不會(huì)隨著新的提交而移動(dòng)。你也不能檢出到某個(gè)標(biāo)簽上面進(jìn)行修改提交,它就像是提交樹上的一個(gè)錨點(diǎn),標(biāo)識(shí)了某個(gè)特定的位置。

$ git checkout master $ git cherry-pick C2 $ git branch -f master C1 $ git cherry-pick C2 C3

Describe

由于標(biāo)簽在代碼庫中起著“錨點(diǎn)”的作用,Git 還為此專門設(shè)計(jì)了一個(gè)命令用來描述離你最近的錨點(diǎn)(也就是標(biāo)簽),它就是 git describe!

Git Describe 能幫你在提交歷史中移動(dòng)了多次以后找到方向;當(dāng)你用 git bisect(一個(gè)查找產(chǎn)生 Bug 的提交記錄的指令)找到某個(gè)提交記錄時(shí),或者是當(dāng)你坐在你那剛剛度假回來的同事的電腦前時(shí), 可能會(huì)用到這個(gè)命令。

clone

git clone

git clone 命令在真實(shí)的環(huán)境下的作用是在本地創(chuàng)建一個(gè)遠(yuǎn)程倉庫的拷貝(比如從 http://github.com)。

如果你看到一個(gè)名為 o/master 的分支,那么這個(gè)分支就叫 master,遠(yuǎn)程倉庫的名稱就是 o。

大多數(shù)的開發(fā)人員會(huì)將它們主要的遠(yuǎn)程倉庫命名為 origin,并不是 o。這是因?yàn)楫?dāng)你用 git clone 某個(gè)倉庫時(shí),Git 已經(jīng)幫你把遠(yuǎn)程倉庫的名稱設(shè)置為 origin 了

不過 origin 對(duì)于我們的 UI 來說太長(zhǎng)了,因此不得不使用簡(jiǎn)寫 o :) 但是要記住, 當(dāng)你使用真正的 Git 時(shí), 你的遠(yuǎn)程倉庫默認(rèn)為 origin!

思路:在 master 分支上做一次提交;然后檢出 o/master,再做一提交。這有助于你理解遠(yuǎn)程分支的不同,他們的更新只是反映了遠(yuǎn)程的狀態(tài)。

$ git commit $ git checkout o/master $ git commit

克隆一個(gè)遠(yuǎn)程倉庫(用 git clone),再在剛創(chuàng)建的遠(yuǎn)程倉庫中模擬一些修改,然后在你自己的本地分支上做一些提交,再拉取遠(yuǎn)程倉庫的變更。

git clone //假設(shè)成員做兩次修改 git fakeTeamwork 2 //本地提交,生成 C4 git commit //更新 git pull

log

git log

查看之前提交的 git 歷史。

merge與rebase區(qū)別

優(yōu)點(diǎn):

  • Rebase 使你的提交樹變得很干凈, 所有的提交都在一條線上

缺點(diǎn):

  • Rebase 修改了提交樹的歷史

比如, 提交 C1 可以被 rebase 到 C3 之后。這看起來 C1 中的工作是在 C3 之后進(jìn)行的,但實(shí)際上是在 C3 之前。

推薦閱讀:git rebase 使用詳解

組合拳

que1:

思路提示:

  • 這里共有三個(gè)特性分支 —— side1 side2 和 side3
  • 我需要將這三分支按順序推送到遠(yuǎn)程倉庫
  • 因?yàn)檫h(yuǎn)程倉庫已經(jīng)被更新過了,所以我們還要把那些工作合并過來
$ git fetch $ git rebase o/master side1 $ git rebase side1 side2 $ git rebase side2 side3 $ git rebase side3 master $ git push

que2:

標(biāo)準(zhǔn)答案:

$ git checkout master // git pull 相當(dāng)于 git fetch + git merge $ git pull $ git merge side1 $ git merge side2 $ git merge side3 $ git push

que3:

當(dāng)你克隆時(shí), Git 會(huì)為遠(yuǎn)程倉庫中的每個(gè)分支在本地倉庫中創(chuàng)建一個(gè)遠(yuǎn)程分支(比如 o/master)。然后再創(chuàng)建一個(gè)跟蹤遠(yuǎn)程倉庫中活動(dòng)分支的本地分支,默認(rèn)情況下這個(gè)本地分支會(huì)被命名為 master。

  • pull 操作時(shí), 提交記錄會(huì)被先下載到 o/master 上,之后再合并到本地的 master 分支。隱含的合并目標(biāo)由這個(gè)關(guān)聯(lián)確定的。
  • push 操作時(shí), 我們把工作從 master 推到遠(yuǎn)程倉庫中的 master 分支(同時(shí)會(huì)更新遠(yuǎn)程分支 o/master) 。這個(gè)推送的目的地也是由這種關(guān)聯(lián)確定的!

拉取遠(yuǎn)程分支并創(chuàng)建本地分支

git checkout -b foo o/master

使用該方式會(huì)在本地新建分支 foo,并自動(dòng)切換到該本地分支 foo。采用此種方法建立的本地分支會(huì)和遠(yuǎn)程分支 o/master 建立映射關(guān)系。

另一種設(shè)置遠(yuǎn)程追蹤分支的方法就是使用:git branch -u 命令,執(zhí)行:

git branch -u o/master foo

這樣 foo 就會(huì)跟蹤 o/master 了。如果當(dāng)前就在 foo 分支上, 還可以省略 foo:

git branch -u o/master

查看如下案例:

作業(yè):

$ git checkout -b side o/master $ git commit $ git pull --rebase $ git push

查看遠(yuǎn)程倉庫地址

到達(dá)指定項(xiàng)目目錄下,該目錄下包含.git 文件夾。然后打開 git,輸入以下命令:

git remote -v

查看/修改用戶名和郵箱地址

查看用戶名和郵箱地址:

$ git config user.name$ git config user.email

修改用戶名和郵箱地址:

$ git config --global user.name "username"$ git config --global user.email "email"

總結(jié)

以上是生活随笔為你收集整理的git按照tag拉取代码_Git实操小课堂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。