1. 程式人生 > >Git 命令手冊

Git 命令手冊

版本控制流程圖

工作區(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後:

兩種選擇:

  1. 從版本庫中刪除該檔案:

    $ git rm file
    $ git commit -m "message" 
    
  2. 誤刪,恢復檔案到最新版:

    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的分叉提交歷史整理成直線;