簡介
Git 是一個(gè)版本控制系統(tǒng)隘膘,功能類似 SVN疑故、CVS,相比我之前使用過的 SVN弯菊,他功能更強(qiáng)大纵势,比如離線使用踱阿、分支邏輯等。
基礎(chǔ)操作
git clone: 克隆遠(yuǎn)程資料庫
git checkout: 將所有文件重置到某個(gè) commit 之前的版本
git init : 初始化當(dāng)前目錄(產(chǎn)生 .git 目錄)
git status <-s>: 當(dāng)前 git 目錄的狀態(tài)信息<short 格式輸出>
git add: 將文件從 Working directory 添加到 Staging area
git commit: 將文件從 Working directory 添加到 Repository (提交信息樣式)
git log: 獲取歷史 commit 信息(ID/Author/Date/Commit Files)
修改撤銷
git checkout -- xx:在 Working directory 重置修改(即是用版本庫里的版本替換工作區(qū)的版本钦铁,無論工作區(qū)是修改還是刪除软舌,都可以“一鍵還原”)
git reset HEAD xx:在 add 到 Staging area 但未 commit,可取消掉 add 操作
git reset HEAD~1:往上撤回一次提交(Repository)牛曹,不保存修改歷史(本地處理方案佛点,僅僅是 HEAD 指針的指向修改)
- git reset --hard commit_id 重置到某一次提交(可以往前或者往后)
- git reflog 查看命令歷史
git revert HEAD:往上撤回,但屬于往后新建提交節(jié)點(diǎn)(遠(yuǎn)程處理方案)
修改對比
git diff id_1 id_2: 獲取 id_2 中對 id_1 的變更內(nèi)容(類似 Linux 命令 diff -u a b)
- 第一行是比較的文件信息
- 第二行表示兩個(gè)版本的git哈希值(index區(qū)域的8aa8763對象黎比,與工作目錄區(qū)域的88394ef對象進(jìn)行比較)超营,最后的六位數(shù)字是對象的模式(普通文件,644權(quán)限)
- --- 表示刪除阅虫,+++ 表示新增
- @@ -1,3 +1,7 @@ 表示 第一個(gè)文件第一行連續(xù) 3 行發(fā)生變化演闭,第二個(gè)文件第 3 行連續(xù) 7 行發(fā)生變化
git diff: 不帶參數(shù),獲取 Working directory 中未添加到 Staging area 中的文件差異
git diff --stage: 獲取 Repository 與 Staging area 中文件差異
git show commit_id: 獲取 commit_id 與其父級(jí)提交中的更改(省略 commit_id 則默認(rèn)為最近的)
分支操作
git branch <-a>: 查看本項(xiàng)目分支<遠(yuǎn)程分支>
git branch branch_name: 新建分支
git checkout branch_name: 切換分支(聯(lián)系到 HEAD 的指向)
git checkout -b branch_name: 新建并切換至分支 branch_name
git branch -d branch_name: 刪除分支標(biāo)簽(保留 commit 信息)
git merge branch_a branch_b: 合并分支 a 和 b
- 添加 a/b 中相對父級(jí)中不存在的添加提交
- 刪除 a/b 中相對父級(jí)中的刪除提交
- 當(dāng) a/b 中出現(xiàn)沖突颓帝,人工處理
<<<<<<<HEAD
my code
||||||| merged common arcestors
origin version code
=======
current master code
>>>>>>>master
日志操作
git log: 獲取歷史 commit 和分支合并信息<只展示 commit id 和 commit 說明
- git log --[pretty=]oneline 每次提交日志顯示一行
- git log --graph 詳細(xì)日志左邊多了一列線條區(qū)分每次提交
git rebase:變基
遠(yuǎn)程操作
git remote <-v>: 獲取當(dāng)前遠(yuǎn)程資料庫<詳細(xì)信息>
git remote add <origin> git@github.com:xxx/xx.git: 添加遠(yuǎn)程資料庫本地名稱為 <origin> (默認(rèn))
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git:添加上游遠(yuǎn)程資料庫
git push origin master: 推送 master 分支到 origin 遠(yuǎn)程資料庫
git pull orgin master: 拉取并合并到本地 master 分支
#等價(jià)于 fetch + merge
git fetch origin #拉取遠(yuǎn)程資料庫到本地 origin/master
git merge master origin/master #更新合并本地 master 分支
當(dāng)多人協(xié)作開發(fā)的時(shí)候米碰,一般不直接 push master 分支,而是通過 pull master 拉取最新的 master 分支到本地购城,然后與本地分支合并同時(shí)處理可能存在的 conflict 吕座,再 push 本地分支到遠(yuǎn)程資料庫,最后提出 pull request 請求合并到 master 分支瘪板。
Git error
should not be doing an octopus : 合并多個(gè)不同代碼版本的一種策略(octopus)吴趴,如果不適合的情況下使用,則出現(xiàn)此消息
You are in 'detached' HEAD' state : 重置到之前的版本出現(xiàn)此提示消息(git reset --hard commit_id 回退)
fatal: you current branch 'master' does not have any commits yet : (HEAD 是當(dāng)前提交的名稱)當(dāng)沒有任何提交情況下執(zhí)行 git log 出現(xiàn)此錯(cuò)誤
如果同步 fork 的倉庫
git fetch upstream
git merge upstream/master
git push origin master