簡介 Introduction
Git 是一個分布式版本控制系統,最初由 Linus Torvalds 創作。Git 是用于 Linux 核心開發的版本控制工具,與 CVS、Subversion 等版本控制工具不同,它采用了分布式版本庫的做法,不需要伺服器端軟體,就可以運作版本控制、使得源代碼的釋出和交流變得極其友善。Git 的速度很快,這對于 Linux 核心這樣的大項目來說非常重要。Git 最為出色的是它的合并追蹤(Merge Tracing)功能。原本 Git 隻适用于 Linux/Unix 平台,但在 Windows 平台下的使用也已經相當成熟。
Git 的三種狀态和四個區域
三種狀态:
- 已送出(committed)
- 已修改(modified)
- 已暫存(staged)
剛開始編輯檔案時,檔案處于**已修改(modified)**狀态,檔案在工作目錄。
- 工作區:工作區是當克隆項目到本地後,項目所在的檔案夾
- 暫存區:用于存儲工作區中添加上來的變更(新增、修改、删除)檔案的地方
- 本地倉庫:用于存儲本地工作區和暫存區送出上來的變更過的檔案的地方
- 遠端倉庫:把項目存儲在一個地方而不是某個人的電腦上,以便多人協同工作。
Git 常用指令
配置相關
git config --list #顯示git配置
git config -e [--global] #編輯配置檔案
git config [--global] user.name "[name]" #設定代碼送出時的使用者名
git config [--global] user.email "[email address]" #設定代碼送出時的郵箱
代碼庫相關
git init #在目前目錄下建立一個代碼庫
git clone [url] #從目标位址下載下傳一個項目
增删檔案相關
git add [file] #把指定檔案添加到暫存區
git add [dir] #把指定目錄添加到暫存區
git add * #把目前目錄的所有檔案添加到暫存區
git rm [file] #删除工作區檔案,并将這次删除放入暫存區
git mv [file-original] [file-renamed] #改名檔案,并将其放入暫存區
送出相關
git commit [file] -m [message] #送出暫存區指定檔案到倉庫
git commit -m [message] #送出暫存區到倉庫
git commit -v #送出時顯示所有資訊差異
git commit -a #送出工作區自上次送出之後的變化,直接到倉庫區
git commit -amend [file] #重做上一次送出,并包括指定檔案的新變化
标簽相關
git tag #列出所有标簽
git tag [tag] #在目前送出建立一個标簽
git tag [tag] [commit] #在指定送出建立一個标簽
git show [tag] #檢視标簽資訊
git push [remote] [tag] #送出指定标簽
git push [remote] --tags #送出所有标簽
git tag -d [tag] #删除本地标簽
檢視資訊相關
git log #顯示目前分支的版本曆史
git status #顯示有變更的檔案
git log --stat #顯示送出曆史,以及每次送出發生變更的檔案
git log -S [keyword] #根據關鍵詞搜尋送出曆史
git log -p [file] #顯示指定檔案的每一次差異
git shortlog -sn #顯示所有送出過的使用者
git diff #顯示工作區和暫存區的差異
git diff --cached [file] #顯示暫存區和上一次送出的差異
git diff [first-branch]...[second-branch] #顯示兩次送出之間的差異
git show [commit]:[filename] #顯示某次送出時,某個檔案的内容
git reflog #顯示目前分支的最近幾次送出
分支相關
git branch #列出所有本地分支
git branch -r #列出所有遠端分支
git branch -a #列出所有本地分支和遠端分支
git branch [branch-name] #建立一個分支,但停留在目前分支
git checkout -b [branch] #建立并切換到該分支
git checkout - #切換到上一個分支
git merge [branch] #合并指定分支到目前分支
git branch -d [branch-name] #删除指定分支
git push origin --delete [branch-name] #删除遠端分支
遠端倉庫相關
git remote -v #顯示所有遠端倉庫
git remote show [remote] #顯示指定遠端倉庫的資訊
git remote add [shortname] [url] #增加并命名一個新的遠端倉庫
git push [remote] [branch] #上傳本地指定分支到遠端倉庫
git remote add [remote] [url] #把本地倉庫和遠端倉庫關聯
git pull [remote] [branch] #取遠端倉庫的内容更新本地倉庫
git pull [remote] [branch] --allow-unrelated-histories #強行合并倉庫
git fetch [remote] #下載下傳遠端倉庫的所有變動