倉庫
-
git init
:會在本地當前目錄下建立一個git倉庫 -
git clone https://github.com/username/a.git
:下載遠端庫到本地 -
git remote add origin git@server-name:path/repo-name.git
:關聯一個遠端倉庫,前提是已經在gitlab上建立了一個倉庫 -
git push -u origin master
:第一次把本地工程推送到遠端倉庫,之後直接git push
即可
檢視日誌
-
git log
檢視提交歷史,可確定回退到哪個版本 -
git log --pretty=oneline
檢視提交歷史,更好看而已 -
git reflog
檢視已執行的命令歷史,可確定回退到哪個版本
工作區與快取區
三種狀態+遠端庫:
圖片描述
執行 add 新增命令後:
圖片描述
執行 commit 提交命令後:
圖片描述
- 工作區:修改或者新新增一個檔案,處於工作區(撤銷:
git checkout -- fname
) - 暫存區:執行
git add fname
後,處於暫存區(撤銷:git reset HEAD fname
) - 分支:執行
git commit -m "desc"
後,提交到了分支(撤銷:git reset --hard commit_id
) - 遠端庫:執行
git push
後,程式碼就推到了遠端庫
撤銷操作
- 在工作區修改後,並未add到暫存區:撤銷工作區的修改
git checkout -- fname
,就回到了和版本號一樣的狀態 - 在工作區新增了一行a,並add到快取區,但沒commit到分支上;然後又在工作區新增了一行b,並未add暫存區:執行
git checkout -- fname
就回到了新增到暫存區後的狀態a - 在工作區修改後,並add到了暫存區:執行
git reset HEAD fname
,就把暫存區的修改撤銷了,回退到工作區狀態;再執行git checkout -- fname
就撤銷了工作區的修改,回到了和版本庫一樣的狀態 - 已經commit到了分支上:執行
git reset --hard commit_id
就撤銷了提交,回退到了暫存區狀態
刪除操作
-
rm fname
:從工作區刪除,撤銷刪除:git checkout -- fname
-
git rm fname
:從版本庫中刪除檔案,徹底刪除:git commit
;撤銷刪除:git reset HEAD fname
,再git checkout -- b
即可完全恢復 -
git checkout -- fname
:把誤刪的檔案恢復到最新版本,其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”
分支管理
-
git branch dev
:建立dev分支 -
git checkout dev
:切換到dev分支 -
git checkout -b dev
:建立並切換到dev分支(從當前分支複製出dev新分支,注意push後再切換其他分支) -
git branch
:檢視所有分支和當前分支 -
git checkout -- fname
:注意:
是撤銷工作區的修改 -
git merge dev
:把dev分支合併到當前分支(如當前是master分支) -
git branch -d dev
:刪除dev分支 -
git push --set-upstream origin dev
:把本地分支push到遠端倉庫 -
git checkout -b 本地分支名 origin/遠端分支名
:從遠端倉庫拉取一條本地不存在的分支## 從當前分支拉新分支開發:
-
假設需要從當前的
master
分支建立新分支的dev2
進行開發:git checkout -b dev2
-
把新分支
dev2
push到遠端git push origin dev2
-
拉取遠端分支
dev2
git pull
-
提示:
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> dev2 經過驗證,當前的分支並沒有和本地分支關聯,根據提示進行下一步:
-
關聯
git branch --set-upstream-to=origin/dev2
-
再次拉取 驗證
git pull
-
## 把遠端倉庫中的dev2
分支拉到本地(本地之前沒有該分支)
git checkout -b dev2 origin/dev2
如果成功,就會在本地自動建立新分支dev2
,並自動切換奧分支dev2
如果拉取不成功,需要執行 git fetch ;然後再執行上面的命令
參考:[git從已有分支拉新分支開發](http://www.cnblogs.com/lingear/p/6062093.html)
`注意:`在分支上修改並commit後,當切換到master分支後是看不到,必須合併分支後才可以。
# 子模組
- git submodule ...
參考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000