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工作方式的仔細看下下面的部落格,很受益: