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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

Git基本操作

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

commit提交

git commit

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

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

查看如下案例:

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

branch創建分支

git branch newBranchName

創建分支后,然后切換到當前新分支下。

git checkout newBranchName

如果你想創建一個新的分支同時切換到新創建的分支的話,可以通過 git checkout -b 來實現。

git checkout -b newBranchName

查看遠程分支

git branch -r

拉取遠程分支并創建本地分支

git checkout -b 本地分支名x origin/遠程分支名x

使用該方式會在本地新建分支x,并自動切換到該本地分支x。采用此種方法建立的本地分支會和遠程分支建立映射關系。

git fetch origin 遠程分支名x:本地分支名x

使用該方式會在本地新建分支x,但是不會自動切換到該本地分支x,需要手動 checkout。采用此種方法建立的本地分支不會和遠程分支建立映射關系。

checkout檢出/切換分支

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

merge合并

合并兩個分支,存在沖突時,能自動合并的會自動合并,不能自動合并的會產生沖突,需要人工處 理。解決沖突的時候,只需要處理沖突的文件,當前工作目錄會存在大量提交的文件,不要去還原這些文件,不要去還原這些文件,不要去還原這些文件。

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

分離Head

目標: 從 bugFix 分支中分離出 HEAD 并讓其指向一個提交記錄。

執行下述命令:

git checkout master git checkout C4

移動

// 切換分支到C2的父節點C1 git checkout C2^

上述 ^ 命令一次只能移動一個位置,比較緩慢。接下來我們學習一個新命令。

移動分支可以直接使用 -f 選項讓分支指向另一個提交。例如:

git branch -f master HEAD~3

上面的命令會將 master 分支強制指向 HEAD 的第 3 級父提交。

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

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

^ 和 ~ 的組合操作

上述三條命令可以簡化為下面一條命令。

作業:

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

撤銷變更

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

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

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

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

git reset HEAD~1

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

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

記住 pushed 是遠程分支,local 是本地分支 —— 這么說你應該知道用分別哪種方法了吧?

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

作業:

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

作業:

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

上述命令為標準答案,本人通過另一種方式實現的。

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

cherry-pick復制

作業:

$ 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暫存

將當前未提交的代碼存放到一個暫存區當中,如果你要做以下其他任何操作,但是當前存在未提交的代碼

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

如果沒有開發完成,則暫存后進行其他操作

其他操作完畢后,將暫存區的代碼恢復到當前工作目錄。恢復的方式有兩種,一種是應用(apply),僅恢復代碼,不清除暫存區的內容。另一種是彈出(unstash),恢復代碼并清空暫存區的代碼。建議使用應用(apply**)**。

暫存區內可以暫存多次代碼,恢復的時候不要選錯。

pull拉取

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

git pull 相當于 git fetch + git merge

git pull origin foo 相當于:

git fetch origin foo; git merge o/foo

還有...

git pull origin bar~1:bugFix 相當于:

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

作業:

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

push推送

將當前代碼推送到服務器上,不指定拉取的分支時會使用當前分支的上游分支(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 的簡寫,類似的 git pull --rebase 就是 fetch 和 rebase 的簡寫!

進階

git push <remote> <place>

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

擺脫 git checkout 的束縛,用 git push 實現下面的目標。

$ git push origin master $ git push origin foo

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

git push origin <source>:<destination>

作業:

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

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

  • git push origin :side刪除遠程分支

fetch下載

從服務器上獲取代碼到本地,不進行合并。

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

git fetch origin foo

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

作業:

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

git fetch origin :bugFix在本地創建一個分支

fakeTeamwork模擬團隊合作

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

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

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

作業:

思路:

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

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

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

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

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

rebase變基/衍合

作業:實現如下操作

git rebase -i HEAD~4

再來一題:

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

二思后新的解題思路:

git rebase bugFix master git rebase -i HEAD~3

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

//首先將master移動到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 相當于 git checkout side1 git rebase o/master

假設 HEAD 在 foo 分支節點上(foo*標識),如果想要將 master 移動到 foo 所在的節點上,并且檢出,則可以通過一條命令來實現。

git rebase foo master

tag

分支很容易被人為移動,并且當有新的提交時,它也會移動。分支很容易被改變,大部分分支還只是臨時的,并且還一直在變。Tag 可以永遠指向某個提交記錄的標識呢,比如軟件發布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性。

它們并不會隨著新的提交而移動。你也不能檢出到某個標簽上面進行修改提交,它就像是提交樹上的一個錨點,標識了某個特定的位置。

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

Describe

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

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

clone

git clone

git clone 命令在真實的環境下的作用是在本地創建一個遠程倉庫的拷貝(比如從 http://github.com)。

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

大多數的開發人員會將它們主要的遠程倉庫命名為 origin,并不是 o。這是因為當你用 git clone 某個倉庫時,Git 已經幫你把遠程倉庫的名稱設置為 origin 了

不過 origin 對于我們的 UI 來說太長了,因此不得不使用簡寫 o :) 但是要記住, 當你使用真正的 Git 時, 你的遠程倉庫默認為 origin!

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

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

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

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

log

git log

查看之前提交的 git 歷史。

merge與rebase區別

優點:

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

缺點:

  • Rebase 修改了提交樹的歷史

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

推薦閱讀:git rebase 使用詳解

組合拳

que1:

思路提示:

  • 這里共有三個特性分支 —— side1 side2 和 side3
  • 我需要將這三分支按順序推送到遠程倉庫
  • 因為遠程倉庫已經被更新過了,所以我們還要把那些工作合并過來
$ git fetch $ git rebase o/master side1 $ git rebase side1 side2 $ git rebase side2 side3 $ git rebase side3 master $ git push

que2:

標準答案:

$ git checkout master // git pull 相當于 git fetch + git merge $ git pull $ git merge side1 $ git merge side2 $ git merge side3 $ git push

que3:

當你克隆時, Git 會為遠程倉庫中的每個分支在本地倉庫中創建一個遠程分支(比如 o/master)。然后再創建一個跟蹤遠程倉庫中活動分支的本地分支,默認情況下這個本地分支會被命名為 master。

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

拉取遠程分支并創建本地分支

git checkout -b foo o/master

使用該方式會在本地新建分支 foo,并自動切換到該本地分支 foo。采用此種方法建立的本地分支會和遠程分支 o/master 建立映射關系。

另一種設置遠程追蹤分支的方法就是使用:git branch -u 命令,執行:

git branch -u o/master foo

這樣 foo 就會跟蹤 o/master 了。如果當前就在 foo 分支上, 還可以省略 foo:

git branch -u o/master

查看如下案例:

作業:

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

查看遠程倉庫地址

到達指定項目目錄下,該目錄下包含.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"

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。