一、Git代碼狀態轉換圖
其中:
- 未被Git跟蹤的狀態為unstage狀態;
- 已被Git跟蹤的狀態為stage狀態(stage:階段),因此包括staging狀態和staged狀態。
untrack files:是指尚未被git所管理的文件;changed but not updated:是指文件被git管理,並且發生了改變,但改動還沒被git管理;這兩種狀態,都可以看成是改動還沒被git管理的狀態,我們這里稱unstage狀態。
staging是commit和未管理之間的一個狀態,也有別名叫index狀態,也就是git已經管理了這些改動,但是還沒完成提交。changes to be commited是指進入staged狀態的文件。
.gitignore中的文件,不會出現在以上三個狀態中。
注:
- 這個圖也解釋了為啥從遠端庫拉代碼,不需要add、commit。
- 代碼一旦修改,就會成為未被git庫跟蹤的狀態。需要add、commit。
二、大白話Git
1、Git 管理代碼,保證代碼版本迭代連續性,即:向A分支merge或者push代碼時,A分支代碼必須是當前代碼的上一個版本,不然會產生沖突。(換句話說:Git確保當前的本地的代碼為最新)
2、Git有修改就有提交,就有新的代碼版本,git管理維護的是修改。
3、Git分支存儲的是代碼副本。
4、push :實際上就是將本地分支合並到遠端庫分支;pull:實際就是將遠端分支合並到本地分支。
三、Git本地常用操作指令
1、創建git庫
git init #在當前目錄中生成一個.git 目錄(含有.git目錄的目錄即是git倉庫)
2、注冊git用戶
--->用於在團隊合作開發中,表明代碼作者。
git config --global user.name XXX #用戶名
git config --global user.email XXX #用戶郵箱
git config --list #查看用戶信息
注:加--global,全局設置。
3、向git庫添加修改
git add [path] #會把對應目錄或文件,添加到stage狀態
git add . #會把當前所有的untrack files和changed but not updated添加到stage狀態
實際上是為修改內容添加index索引。
4、向版本庫提交修改
git commit –m “XXXX” #提交修改,添加注釋
注:git 提示: 未有add紅色字體,未有commit綠色字體,已提交則worktree是干凈的
5、查看當前代碼庫的狀態
git status
6、查看版本信息
--->實際是查看修改提交信息
git log
git log --graph #以圖形化(節點)展示當前git庫的提交信息。
7、查看指定版本信息
git show sdjf974654dd…. #(show后面為每次提交系統自動生成的一串哈希值)
git show sdji97 #一般只使用版本號的前幾個字符即可
8、撤銷修改
git reset
(1)撤銷整體修改
git reset --hard #回到原來編輯的地方,改動會丟失。(同樣適用於團隊對於其他人
的修改恢復)
git reset --hard sdv143kvf…... #可回到指定的版本#(hard后面為每次提交系統自
動生成的一串哈希值)
git reset [path] 會改變path指定的文件或目錄的stage狀態,到非stage狀態。
git reset 會將所有stage的文件狀態,都改變成非stage狀態。
(2)撤銷某次修改
回退1個change的寫法就是git reset HEAD^,
2個為HEAD^^,
3個為HEAD~3,以此類推。
9、向遠端庫推送修改(提交修改)
git push origin 分支名
10、暫存修改
git stash可以把當前的改動(stage和unstage,但不包括untrack的文件)暫存。
然后通過git stash list查看。
並通過git stash apply重新取出來。但apply之前要保證worktree是干凈的。
四、Git團隊開發常用操作指令
1、獲取遠端庫項目
git clone/pull
2、團隊開發的基本流程(多分支合並一個分支)
git add . #添加改動的文件
git commit #(提交至本地)
git pull --rebase #(將服務器項目與本地項目合並)
git push #(將本地項目上傳至遠端庫)
(在提交前要git pull --rebase 一下,確保當前的本地的代碼為最新。)
五、Git 分支管理
1、建立分支
git branch AAA #建立分支AAA
2、分支切換
git checkout AAA #從當前分支切換到AAA分支 (若AAA分支不存在,則自動新建)
3、將分支與主枝master合並
git checkout master #(首先切換回主枝)
git merge AAA #(將分支AAA與主枝合並)
注:git merge:默認情況下,Git執行"快進式合並"(fast-farward merge),會直接將Master分支指向Develop分支。
使用--no-ff參數后,會執行正常合並,在Master分支上生成一個新節點。為了保證版本演進的清晰(保持提交曲線為直線),建議采用這種方法。
4、當前分支查看
git branch #默認有master(也稱為主枝)
git branch -r #查看遠端庫分支
git branch –a #查看當前所有分支(包括本地分支和遠端庫分支)
5、刪除分支
git branch –d AAA #刪除分支AAA
6、切下遠端庫A分支到本地庫A分支
git checkout -b A origin/A (若本地A分支不存在,則自動新建)
注:上面只是一些基本的操作命令,更多的命令可通過幫助文檔查詢。
幫助文檔的使用:
man git-<需查詢的指令> #(git后面有“-”)
如commit的查詢為 man git-commit
六、本地代碼上傳Github
1、Gtthub上建立遠端倉庫,復制下載鏈接。
2、本地指定目錄下,Gitbash粘貼遠端倉庫下載鏈接拉取遠端倉庫代碼。
3、復制本地需要提交的代碼到遠端倉庫目錄。
3、Git add、commit、push 提交本地代碼至Github遠端倉庫。
參考文檔:
https://www.cnblogs.com/chiao/archive/2011/07/27/2117835.html