1. 程式人生 > >git使用和指令詳解

git使用和指令詳解

 

最近使用git已經有三個月了,是時間總結一下了。先說明git和svn最大的兩點區別:

1)使用上:git多了本地分支,所以與真正分支有了隔離,並且offline也可以看log等,指令較多。但是提供了pull request等功能,功能更加強大。

2)最核心的區別Git是分散式的,而Svn不是分佈的。git使用元資料和head等來處理多版本,而svn真的是多個檔案

整體來說感覺git靈活,強大但難於掌握點。

詳細區別借鑑:https://www.cnblogs.com/mtl-key/p/6902627.html

主要操作指令與流程如下:

1 clone專案到本地,先cd到你的工作空間,然後執行

git clone ssh://[email protected]/path/to/repo.git

2  檢視本地分支的提交和修改

git status  展示所做變化,包括workspace中的和已經commit到本地分支的

    對於workspace中的修改:提示如        modified:   src/main/webapp/org/cboard/view/dashboard/param/cascading.html
    對與已經提交到本地分支的修改:提示如 Your branch is ahead of 'origin/cboard/100' by 1 commit.

3 提交修改到暫存區,暫存區到本地分支

git add 是處理暫存區和你workspac中的修改,執行git add什麼都不會做,增加了引數才可以
git add -A  提交所有變化
git add -u  提交被修改(modified)和被刪除(deleted)檔案,不包括新檔案(new)
git add .  提交新檔案(new)和被修改(modified)檔案,不包括被刪除(deleted)檔案 ‘’

git commit -m "提交的註釋"   將暫存區的修改提交到本地分支

注意git中程式碼的提交分為三個層次,你修改的程式碼實際在workspace中,add後修改儲存到本地暫存區,commit後儲存到本地分支,push後儲存到遠端分支,只有提交到遠端分支別人才可以獲取到你的程式碼。

4 拉取所有上游提交命令到本地倉庫,並嘗試和她的本地修改合併:git pull --rebase origin master

--rebase選項告訴Git把本地提交移到同步了中央倉庫修改後的master分支的頂部,如果有衝突:

git add <some-file>

git rebase --continue

5 提交本地分支到遠端分支:git push origin master

注意,origin是在克隆倉庫時Git建立的遠端中央倉庫別名。master引數告訴Git推送的分支

6 新建分支

在開始開發功能前,小紅需要一個獨立的分支。使用下面的命令新建一個分支

git checkout -b marys-feature master

這個命令檢出一個基於master名為marys-feature的分支,Git-b選項表示如果分支還不存在則新建分支。

7

git push -u origin marys-feature
git push

這條命令push marys-feature分支到中央倉庫(origin),-u選項設定本地分支去跟蹤遠端對應的分支。
設定好跟蹤的分支後,小紅就可以使用git push命令省去指定推送分支的引數。

8合併marys-feature的內容到master

git checkout master
git pull
git pull origin marys-feature
git push

首先要檢出master分支並用git pull確認是它是最新的。然後執行git pull origin marys-feature合併marys-feature分支到和已經和遠端一致的本地master分支。

9或者用merge的方式,先建立並使用some-feature分支

git checkout -b some-feature develop

他們用老套路新增提交到各自功能分支上:編輯、暫存、提交:

git status
git add <some-file>
git commit

 

添加了提交後,小紅覺得她的功能OK了。如果團隊使用Pull Requests,這時候可以發起一個用於合併到develop分支。將some-feature合併到develop:

git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature

第一條命令在合併功能前確保develop分支是最新的。注意,功能決不應該直接合併到master分支。

 

 

git rebase指令詳解:

git rebase指令的使用,在本地倉庫對commit進行處理,注意此命令執行後沒有push到遠端倉庫
rebase作用1:在本地倉庫合併多個commit為一個完整commit
git rebase -i [startpoint]  [endpoint] 在這裡面進行對所有提交到本地倉庫還沒有提交到遠端倉庫的commit進行操作,可以刪除合併等,
其中-i的意思是--interactive,即彈出互動式的介面讓使用者編輯完成合並操作,[startpoint]  [endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點預設是當前分支HEAD所指向的commit(注:該區間指定的是一個前開後閉的區間)。

操作指令解釋如下:
pick:保留該commit(縮寫:p)
reword:保留該commit,但我需要修改該commit的註釋(縮寫:r)
edit:保留該commit, 但我要停下來修改該提交(不僅僅修改註釋)(縮寫:e)
squash:將該commit和前一個commit合併(縮寫:s)
fixup:將該commit和前一個commit合併,但我不要保留該提交的註釋資訊(縮寫:f)
exec:執行shell命令(縮寫:x)
drop:我要丟棄該commit(縮寫:d)

第一次wq後會進入修改註釋頁面

如果退出後需要繼續編輯使用指令如下
git rebase --conitnue 會進入commit對應註釋的處理,就是可以修改你提交到本地倉庫時的註釋
 然後 退出就會自動提交
get rebase --abort 放棄rebase

rebase作用2:將某一段commit貼上到另一個分支上

現在所在的分支是cboard/100,gi他log結果如下:

現在新建branch dev;指令如下:git branch dev;現在想把commit1的內容貼上到dev上

執行指令如下 :git rebase 155288695 b45901a42 --onto dev

注意:雖然此時HEAD所指向的內容正是我們所需要的,但是dev分支是沒有任何變化的,git只是將C~E部分的提交內容複製一份貼上到了dev所指向的提交後面,我們需要做的就是將dev所指向的提交id設定為當前HEAD所指向的提交id就可以了

git checkout dev
git reset --hard b45901a42
 

 

建議深入瞭解git工作方式的仔細看下下面的部落格,很受益:

https://www.cnblogs.com/xirongliu/p/4584653.html