Git 命令手冊
阿新 • • 發佈:2018-11-16
版本控制流程圖
工作區(Working Directory)
版本庫(Repository):隱藏目錄 /.git
版本庫中包含index(stage)
的暫存區和自動建立的第一個分支 master
,以及指向master
的指標head
當前使用者配置
# 配置
$ git config --global user.name "name"
$ git config --global user.email "email address"
# 檢視
$ git config --global --list
建立版本庫
# 建立 $ git init # 檢視隱藏 .git $ ls -a # 撤銷git $ rm -rf .git # 將檔案新增到倉庫 $ git add *.* *.* #將整個專案新增到倉庫 $ git add . # 檢視已經新增的檔案 $ git ls-files # 將新增的檔案提交到倉庫 $ git commit -m "message" # 檢視工作區狀態 $ git status # 檢視工作區和版本庫裡面檔案 file 最新版本的區別 $ git diff HEAD -- file
版本回退
檔案 1.修改 2. 新增 3. 提交
# 檢視歷史修改記錄
$ git log
# 回退到上個版本 HEAD表示當前版本 ^表示上一個 ^^表示上上個
$ git reset --hard HEAD^
# 回到未來的某個版本(*****為commit id)
$ git reset --hard *****
如果不知道未來版本號*****
# 檢視每次命令
$ git reflog
撤銷修改
把file
檔案在工作區的修改全部撤銷。
$ git checkout -- file
兩種情況:
一種是file
自修改後還沒有被放到暫存區,撤銷修改就回到和版本庫一模一樣的狀態;
一種是file
已經新增到暫存區後,又作了修改,撤銷修改就回到新增到暫存區後的狀態。
三種場景:
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
。
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>
,回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退,不過前提是沒有推送到遠端庫。
刪除檔案
刪除工作區檔案file
後:
兩種選擇:
-
從版本庫中刪除該檔案:
$ git rm file $ git commit -m "message"
-
誤刪,恢復檔案到最新版:
git checkout -- file
新增遠端倉庫
$ git remote add origin https://github.com/dreamhomes/test.git
# 第一次
$ git push -u origin master
# 其它
$ git push origin master
遠端庫克隆
# ssh
$ git clone [email protected]:dreamhomes/test.git
# https
$ git clone https://github.com/dreamhomes/test.git
建立和合並分支
# 檢視分支
$ git branch
# 建立分支
$ git branch <name>
# 切換分支
$ git checkout <name>
# 建立+切換分支
$ git checkout -b <name>
# 合併某個分支到當前分支
$ git merge <name>
# 刪除分支
¥ git branch -d <name>
解決衝突
當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是把Git合併失敗的檔案手動編輯為我們希望的內容,再提交。
用git log --graph
命令可以看到分支合併圖。
多人協作
- 檢視遠端庫資訊:
git remote -v
- 從本地推送分支:
git push origin branch-name
- 如果推送失敗,用
git pull
抓取遠端的新提交; - 在本地建立和遠端分支對應的分支:
git checkout -b branch-name origin/branch-name
名稱一致; - 建立本地分支和遠端分支的關聯:
git branch --set-upstream branch-name origin/branch-name
- 從遠端抓取分支, 使用
git pull
,如果有衝突,要先處理衝突。 git rebase
操作可以把本地未push的分叉提交歷史整理成直線;