gitlab特性和實用技巧


  目錄結構:

  • 第一章 git概述
    • 1.1  本地倉庫結構圖
    • 1.2 文件狀態
    • 1.3 生命周期
  • 第二章 git於svn比較
  • 第三章 Git及基本特性及應用
    • 3.1.獲取git倉庫
      • 3.1.1 初始化版本庫
      • 3.1.2 首次推送本地項目到遠程倉庫
      • 3.1.3 克隆遠程倉庫 
    • 3.2. 分支管理
      • 3.2.1  svn和git 
      • 3.2.2 本地分支操作
      • 3.2.3.分支合並
    • 3.3 關於版本回退
      • 總結:
    • 3.4 撤銷修改
      • 1. 存在兩種情況 
      • 2.處理辦法:
      • 總結:
    • 3.5 刪除文件
    • 3.6.git的暫存功能
      • 場景
      • 總結
    • 3.7.多人協作
    • 3.8關於標簽 
      • 3.8.1 創建標簽
      • 3.8.2 操作標簽
  • 第四章 git 刪除遠程倉庫文件
    • 4.1  預覽將要刪除的文件
    • 4.2 確定無誤后刪除文件
    • 4.3 提交到本地並推送到遠程服務
    • 4.4 修改本地 .gitignore 文件 並提交

 

第一章 git概述

1.1  本地倉庫結構圖

1.2 文件狀態

已提交(committed):數據已經安全的保存在本地數據庫中。

已暫存(staged):對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。

已修改(modified):修改了文件,但還沒保存到數據庫中。

工作流程:

1、檢出工程。

2、在工作目錄中修改文件。

3、暫存文件,將文件的快照放入暫存區域。

4、提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

1.3 生命周期

使用Git 時文件的生命周期:

第二章 git於svn比較

 

 

總結對比,如下所示:

 

SVN

Git

管理方式

集中式

分布式

聯網

Commit/log必須聯網

本地可進行任何操作

服務端軟件支持

必須有服務端

不需要

數據保存

按文件保存

按元數據保存

分支管理

另開一個目錄,完全拷貝一份

同一個目錄,文件只一份,存快照

第三章 Git及基本特性及應用

3.1.獲取git倉庫

3.1.1 初始化版本庫

在計算機上任意地方創建一個文件夾,進入文件夾目錄右擊鼠標點擊git bash here打開git命令窗口,執行git init命令。

3.1.2 首次推送本地項目到遠程倉庫

將要推送的項目拷貝到本文件夾下,然后執行如下命令:

$ git add . #跟蹤文件並將文件添加到暫存區
$ git commit -m “提交信息”
$ git remote add origin git@gitlab.com:mingming/projectName.git(關聯一個遠程庫)
$ git push -u origin master 

由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。  

3.1.3 克隆遠程倉庫 

git clone git@gitlab.com:mingming/projectName.git(即:[url])  

3.2. 分支管理

3.2.1  svn和git 

SVN中的分支?

完全拷貝,與其他分支是不同的文件

實踐中往往開發分支沒有及時同步到主分支

結果:開發分支與主分支差異越來越大,以至於無法同步……

本地提交前須update,可能造成:本地代碼正常,update后沖突,解決沖突時不小心覆蓋了自己新加代碼

Git分支

git保存的是快照

不同分支都是在同一份文件上,git保存不同版本快照

分支的遷移很容易 —— 改變“指針”指向

3.2.2 本地分支操作

基本命令:

1)查看分支:git branch

2)創建分支:git branch branch-name

3)切換分支:git checkout branch-name

4)創建並切換分支:git checkout -b branch-name

5)合並某分支到當前分支:git merge <要合並的分支name>

6)刪除分支:git branch -d branch-name(對於未合並的分支,使用此命令無法刪除,需要換成-D強制刪除,但會丟失掉此分支所做的工作)。

7)哪些分支合並到當前分支:git branch --merged(反之,git branch --no-merged)

8)刪除遠程分支:git push origin --delete 遠程分支。

基本上這個命令做的只是從服務器上移除這個指針。 Git 服務器通常會保留數據一段時間直到垃圾回收運行,所以如果不小心刪除掉了,通常是很容易恢復的。

9)git提交歷史查詢:git log --graph --pretty=oneline --abbrev-commit。

3.2.3.分支合並

 

合並分支時,加上--no-ff參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。

可以看到,不使用Fast forward模式,merge后就像這樣:

3.3 關於版本回退

 

git reset --hard HEAD^或 git reset --hard 版本號(可回到任一個版本)

Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

如何獲得刪除掉的版本號:

Git提供了一個命令git reflog用來記錄你的每一次命令。

總結:

  • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
  • 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
  • 要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

3.4 撤銷修改

1. 存在兩種情況 

1)一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

2)一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。

總之,就是讓這個文件回到最近一次git commit或git add時的狀態。 

2.處理辦法:

1)對於第一種情況:

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷。

2)對於第二種情況:

用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區,git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

通過git reset HEAD <file>回到了第一種情況。

總結:

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

3.5 刪除文件

現在你有兩個選擇,一種是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,並且git commit。

另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本:

$ git checkout -- test.txt

 git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

3.6.git的暫存功能

 

場景

軟件開發中,bug就像家常便飯一樣。有了bug就需要修復,在Git中,由於分支是如此的強大,所以,每個bug都可以通過一個新的臨時分支來修復,修復后,合並分支,然后將臨時分支刪除。 

當你接到一個修復一個代號101的bug的任務時,很自然地,你想創建一個分支issue-101來修復它,但是,等等,當前正在dev上進行的工作還沒有提交。 

並不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎么辦? 

幸好,Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作:  

$ git stashSaved working directory and index state WIP on dev: f52c633 add merge

現在,用git status查看工作區,就是干凈的(除非有沒有被Git管理的文件),因此可以放心地創建分支來修復bug。 

修復完成后,切換到master分支,並完成合並,最后刪除issue-101分支。 

現在,是時候接着回到dev分支干活了! 

 

$ git checkout dev 

工作區是干凈的,剛才的工作現場存到哪去了?用git stash list命令看看: 

 

$ git stash liststash@{0}: WIP on dev: f52c633 add merge

工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法: 

一種方式:用git stash apply恢復,但是恢復后,stash內容並不刪除,你需要用git stash drop來刪除; 

另一種方式:用git stash pop,恢復的同時把stash內容也刪了: 

 

$ git stash pop 
On branch dev 
Changes to be committed: 
 (use "git reset HEAD <file>..." to unstage) 
 new file: hello.py 
Changes not staged for commit: 
 (use "git add <file>..." to update what will be committed) 
 (use "git checkout -- <file>..." to discard changes in working directory) 
 modified: readme.txt 
Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何stash內容了: 

 

$ git stash list

 你可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令:$ git stash apply stash@{0} 

總結

修復bug時,我們會通過創建新的bug分支進行修復,然后合並,最后刪除; 

 

當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場。

3.7.多人協作

查看遠程庫信息,使用git remote -v; 

本地新建的分支如果不推送到遠程,對其他人就是不可見的; 

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交; 

在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致; 

建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name; 

從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突(手動處理)。

3.8關於標簽 

3.8.1 創建標簽

命令git tag <tagname>用於新建一個標簽,默認為HEAD,也可以指定一個commit id; 

命令git tag -a <tagname> -m "blablabla..."可以指定標簽信息; 

命令git tag可以查看所有標簽。 

命令git push origin <tagname>可以推送一個本地標簽; 

命令git push origin --tags可以推送全部未推送過的本地標簽; 

命令git tag -d <tagname>可以刪除一個本地標簽。 

3.8.2 操作標簽

命令git push origin <tagname>可以推送一個本地標簽;

命令git push origin --tags可以推送全部未推送過的本地標簽;

命令git tag -d <tagname>可以刪除一個本地標簽。

命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。

第四章 git 刪除遠程倉庫文件

第四章 git 刪除遠程倉庫文件


     項目開發初期由於.gitignore 文件配置不正確很有可能導致某些不需要的目錄上傳到 git 遠程倉庫上了,這樣會導致每個開發者提交的時候這些文件每次都會不同。除了一開始提交的時候注意配置好 .gitignore 文件外,我們也需要了解下出現這種問題后的解決辦法。

具體操作步驟如下:

4.1  預覽將要刪除的文件

git rm -r -n --cached 文件/文件夾名稱加上 
-n 這個參數,執行命令時,是不會刪除任何文件,而是展示此命令要刪除的文件列表預覽。

4.2 確定無誤后刪除文件

git rm -r --cached 文件/文件夾名稱

4.3 提交到本地並推送到遠程服務

git commit -m "提交說明"
git push origin master

4.4 修改本地 .gitignore 文件 並提交

git commit -m "提交說明"
git push origin master

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM