Git實戰教程(下)

2021-08-20 12:12:00 字數 4399 閱讀 7047

git實戰教程--基本用法(下)

1)比較提交--git diff

#先對專案內容做些修改

$cd gitproject

$echo "new line" >> readme.md

$echo "new file" >> file1

$git status

#可以看到乙個檔案修改了,另外乙個檔案新增了。如何檢視修改的檔案內容,就需要使用

git diff命令

#就修改內容新增到本地快取區,萬用字元可以把當前目錄下所有修改的新增的檔案都自動新增

$git add *

$git commit -m 'update code'

#提交**

注:git diff

檢視修改內容

git diff --cached

檢視快取區內容修改

2)比較分支

可以用diff來比較專案中任意兩個分支的差異

首先建立乙個新的分支test,並在該分支上提交一些修改

#建立test分支並切換到該分支

$git branch test

$git checkout test

$ehco "branch test" >> file1

#新增新的一行到file1

$echo "new file2" >> file2

#建立新的檔案file2

#提交所有修改

$git add *

$git commit -m 'update test branch'

#然後檢視test分支何master之間的差別:

$git diff master test

3)更多的比較選項

要檢視當前工作目錄與另外乙個分支的差別,可以用以下命令

$git checkout master

$git diff test

#加上路徑限定符,只比較乙個檔案或目錄

$git diff test file1

#顯示當前工作目錄下的file1與test分支之間的差別

#--stat引數可以統計有哪些檔案被修改,有多少行被改動

$git diff test --stat

3)分布式的工作流程

3.1. 分布式的工作流程

目前的專案在 /home/shiyanlou/gitproject目錄下,這是我們的git倉庫(repository)另乙個使用者也想參與開發,如何讓他提交**到你的git倉庫?

該使用者需要從git倉庫進行轉殖(這裡假設為同shiyanlou使用者,不同專案下開發)

$cd /tmp

#進入到臨時目錄

$git clone /home/shiyanlou/gitproject myrepo

$ls -l myrepo

#這就建了乙個新的叫「myrepo」的目錄,這個目錄裡包含了乙份git project倉庫的轉殖

#在myrepo做一些修改並提交

$cd myrepo

$echo "newcontent" > newfile

$git add newfile

$git commit -m 'add newfile'

#myrepo修改完成後,合併到gitproject的git倉庫

可以在倉庫 /home/shiyanlou/gitproject中把myrepo的修改pull下來

$cd /home/shiyanlou/gitproject

$git pull /tmp/myrepo master

$ls#檢視當前目錄檔案

#這就是myrepo的主分支合併到了git project的當前分支裡了

#如果git project在myrepo修改檔案內容的同時也做了修改的話,可能需要手工修復

#如果要經常操作遠端分支(remote branch),可以定義它們的縮寫

$git remote add myrepo /tmp/myrepo

#git pull命令執行兩個操作:它從遠端分支(remote branch)抓取修改git fetch的內容,然後把它合併git merge進當前的分支。gitproject可以用git fetch來執行git pull前半部分的工作,但是這條命令並不會把抓下來的修改合併到當前分支。

#通過git log檢視遠端分支的所有修改

$git log -p master..myrepo/master

$git fetch myrepo

#gitproject抓取myrepo

$git merge myrepo/master

#把修改合併到它的主分支

#如果在myrepo目錄下執行git pull,myrepo會從轉殖的位置拉取**並更新本地倉庫,就是把gitproject上的

$cd /home/shiyanlou/gitproject

$echo "gitproject:new line" >> newfile

$git commit -a -m 'add newline to newfile'

$cd /tmp/myrepo

$git pull

#同步gitproject的所有修改

#因為myrepo是從gitproject倉庫轉殖的,那麼它就不需要知道gitproject倉庫的位址。因為git把gitproject倉庫的位址儲存到myrepo的配置檔案中,這個位址就是git pull時預設使用的位址。

$git config --get remote.origin.url

#如果myrepo和gitproject在不同的主機上,可以通過ssh協議來執行clone和pull操作

$git clone localhost:/home/shiyanlou/gitproject test

3.2. 公共git倉庫

開發過程中通常大家都會使用乙個公共的倉庫,並clone到自己的開發環境中,完成乙個階段的**後可以告訴目標倉庫的維護者來pull自己的**。

如果你和維護者都在同一臺機器上有賬號,那麼你們可以互相從對方的倉庫目錄裡直接拉所有的修改,git命令裡的倉庫位址也可以是本地的某個目錄名

$git clone /path/to/repository

$git pull /path/to/other/repository

3.3. 將修改推到乙個公共倉庫

通過http或是git協議,其他維護者可以通過遠端訪問的方式抓取(fetch)你最近的修改,但是他們沒有寫許可權。如何將本地私有倉庫的最近修改上傳到公共倉庫。

最簡單的辦法就是git push命令,推送本地的修改到遠端git倉庫。

$git push ssh: master:master

或者$git push ssh: master

#git push命令的目的倉庫可以是ssh或http/https協議訪問

3.4. 當推送**失敗時要怎麼辦

如果推送(push)結果不是快速向前fast forward,可能會報錯。

這種情況通常是沒有使用git pull獲取遠端倉庫的最新更新,在本地修改的時候。遠端倉庫已經變化了,此時應該先使用git pull合併最新的修改再執行git push

$git pull

$git push ssh: master

4)git標籤

4.1. 輕量級標籤

可以使用git tag不帶任何引數建立乙個標籤(tag)指定某個提交(commit)

$cd /home/shiyanlou/gitproject

$git log

#檢視git提交記錄

$git tag stable -1 8c315325

#選擇其中乙個記錄標誌位stable-1的標籤,注意需要就後面的8c315325替換成倉庫下的真

實提交內容,commit的名字很長,通常只需要寫前面8位即可

$git tag

#檢視當前所有tag

#這樣我們可以用stable -1作為提交8c315325的**。

4.2. 標籤物件

git tag中使用-a,-s或-u三個引數中的任意乙個,都會建立乙個標籤物件,並且需要乙個標籤訊息(tag message)來作為tag新增注釋。

$git tag -a stable -2 8c315325 -m "stable 2"

$git tag

4.3. 簽名的標籤

簽名標籤可以讓提交和標籤更加完整可信。如果配有gpg key,那麼就可以很容易建立簽名的標籤。

首先要在你的.git/config或~/.gitconfig裡配好key

$git config (--global) user.signingkey

#在建立標籤時使用-s引數來建立「簽名的標籤」

$git tag -s stable -1 1b2eld3ff

#如果沒有在配置檔案中配gpg key,可以用-u引數直接指定

$git tag -u stable-1 1b2e1d63ff

Git工作實用實戰教程

作為乙個新手去用git協作開發,肯定是一臉懵逼。小弟也是眾多新人的一位,這不剛剛整懂!剛剛把自己教明白!特此來幫助大家 也建議大家先會用git命令,在去使用第三方工具 sourcetree tortoisegit idea自帶工具等等。workspace 工作區 index stage 暫存區 re...

實驗樓 Git實戰教程

實驗1 git介紹 1.版本控制系統 1 集中式版本控制系統 版本庫是集中存放在 伺服器的,工作時需要先從 伺服器取得最新的版本,然後工作完成後把自己的修訂推送給 伺服器。這類系統都有乙個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這台伺服器,取出最新的檔案或者提...

Ubuntu下git使用教程

sudo apt get install git github用到了ssh,需要在shell裡檢查是否連線到github willard willard pc github blog ssh t git github.com hi willard yuan you ve successfully a...