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...