git init???
?????? 初始化一個 Git 倉庫(repository),即把當(dāng)前所在目錄變成 Git 可以管理的倉庫。
git add
? ? 文件??????????? 把文件添加到 暫存區(qū)(stage),可被 track 追蹤紀(jì)錄下來。可多次使用來添加多個文件。
? ? *????????????????? 添加所有修改到暫存區(qū),效果同 git add all,待驗證。
? ? .?????????????????? 暫存新增加的和修改的文件,不包括已刪除的文件。即當(dāng)前目錄下所有文件。
? ? -p???????????????? 暫存文件的一部分,會逐部分詢問是否添加
git commit
? ? -m? ? ?????????????? 一次性把暫存區(qū)所有文件修改提交到倉庫的當(dāng)前分支。
? ? -am? ? ???????????? 使用該命令,Git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交。相當(dāng)于add+commit
? ? --amend????????? 重新提交,覆蓋上一次的提交。尤其適用于提交完了才發(fā)現(xiàn)漏掉了幾個文件沒有添加,或者提交信息寫錯了的情況。
? ? -p? ? ???????????????? commit 文件的一部分,會逐部分詢問是否提交
git status?
????? 顯示當(dāng)前倉庫的最新狀態(tài)。
? ? ? ? ? ? 提交之后,工作區(qū)就是“干凈的”,即沒有新的修改;
? ? ? ? ? ? 有未提交文件時,分三個部分:
? ? ? ? ? ? ? ? 1.在 stage 的,修改了的文件,即將被 commit
? ? ? ? ? ? ? ? 2.沒有 stage 的,修改了的文件,但被git track過的文件。
? ? ? ? ? ? ? ? 3.新的還沒有被git track過的文件。
git diff? ?
?????? 查看工作區(qū)中的修改。
--staged? ? ? ? ? ? ? ? ? ??????????????????????? 查看 暫存區(qū)中的修改。
<commit id1> <commit id2>???????? 比較兩次 commit 之間的差異。
<branch1> <branch2>? ? ? ???????????? 在兩個 branch 之間比較。
文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? 查看指定文件具體修改了哪些內(nèi)容。
HEAD -- 文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? 查看版本庫最新版本和工作區(qū)之間的區(qū)別。就是查看自己pull以來修改了什么
git show? ?
?????? 查看最后一個 commit 的修改。
git log?
?????? 顯示從最近到最遠的提交日志
? ? -p? ? ? ? ? ? ???????????????????? 除顯示基本信息之外,顯示每次提交的內(nèi)容差異
? ? -2? ? ? ? ? ? ???????????????????? 僅顯示最近兩次提交。
? ? -pretty=oneline?????????? 簡化日志信息,將每個提交放在一行顯示
git checkout -- 文件? 丟棄工作區(qū)的修改,讓該文件回到最近一次 git commit 或 git add 之后的狀態(tài)。
? ? 丟棄的范圍包括
? ? ? ? ? 1. 修改后還沒有放到stage
? ? ? ? ? 2. 添加到stage后又作了修改
git reset
? ? HEAD 文件? ??????????????????? 把stage的修改撤銷(unstage),回退到工作區(qū)。
? ? --hard? ? ? ???????????????????????? 重置所有文件到未修改的狀態(tài)。
??? --hard HEAD??????????????????? 回退到某個版本版本(回退上個版本為:HEAD^, 上上個版本為HEAD^ ^,上100個版本為:HEAD-100)? ?
??? <commit SHA>??????????????? 重置到某個 commit。
? ? HEAD~1? ? ? ????????????????????? 將當(dāng)前 branch 重置為倒數(shù)第二個 commit (即丟棄最后一個 commit)。
git revert?
??????? revert實質(zhì)是產(chǎn)生一個新的 commit,內(nèi)容和要還原的 commit 完全相反。 比如,A commit 在 main.c 中增加了三行,revert A 產(chǎn)生的 commit 就會刪除這三行。
? ? <commit id>? 還原某個 commit。
? ? HEAD? ? ? ? ? 還原到上次 commit。
git rm
? ? 文件? ? ? ? ? ????????????????? 把文件從版本庫和工作區(qū)中刪除,不會再追蹤到。
? ? -f 文件? ? ? ? ???????????????? 強制刪除版本庫和工作區(qū)中有修改的文件。
? ? --cached 文件? ?????????? 把文件從版本庫中刪除,但讓文件保留在工作區(qū)且不被 Git 繼續(xù)追蹤(track)
git remote?
???????? 查看已經(jīng)配置的遠程倉庫服務(wù)器
? ? -v? ? ? ? ? ? ? ? ? ? ? ???????????????????????? 顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應(yīng)的 URL。
? ? ls-remote <remote-name>?????? 顯示獲得遠程引用的完整列表。一般查看HEAD是哪個版本
? ? show <remote-name>? ? ? ??????? 可以得到遠程分支更為詳細的信息以及 pull 和 push 相關(guān)提示信息。
? ? add <shortname> <url>? ???????? 添加并關(guān)聯(lián)一個遠程庫。其中,shortname用來代替整個 url。
git push? ?
???????? 推送本地修改到 origin。
? ? -u origin master? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????? 關(guān)聯(lián)后,使用該命令第一次推送 master 分支的所有內(nèi)容
? ? origin 遠程分支(通常是 master)? ? ? ?? ? ? ? 推送最新修改。
? ? rename old_name new_name? ? ? ? ? ? ? ? ? ?? 重命名一個遠程倉庫的簡寫名。
? ? rm <remote-name>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????? 移除一個遠程倉庫。
? ? origin --delete <remote branch name>?????? 刪除一個遠程分支。
? ? origin --delete <branch name>? ? ? ? ? ? ? ? ? ? 在本地和遠程同步刪除分支。
git clone
? ? git@github.com:username/<repo name>.git? ? ? 從遠程庫(origin)克隆一份到本地,倉庫名同遠程倉庫名。
? ? https://github.com/username/repo name.git? ? ?? 作用同上。但不建議使用 https 協(xié)議
? ? <repo url> <folder name>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 克隆一個倉庫到指定文件夾。
? ? <repo url>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 克隆一個倉庫到當(dāng)前文件夾(應(yīng)該是空的)。
git branch?
??????? 列出本地當(dāng)前所有分支,方便查看。當(dāng)前分支前面會標(biāo)有一個 * 號。
? ? -r? ? ? ? ?????????????? 查看遠程分支列表。
? ? -a? ? ? ? ????????????? 顯示所有分支,包括本地和遠程。
? ? -v? ? ? ? ????????????? 查看每一次分支的最后一次提交。
? ? -vv? ? ? ????????????? 查看設(shè)置的所有跟蹤分支。將所有的本地分支列出來并且包含更多的信息
? ? --merged? ??????? 查看所有已經(jīng)被 merge 的 branch。
? ? --no-merged???? 查看所有還沒被 merge 的 branch。
git checkout <branch name>?
?????? 切換到該branch
? ? -b <branch name>? ?? 創(chuàng)建并切換到新的branch,相當(dāng)于下面兩條命令:git branch 分支 + git checkout 分支。
? ? -? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 切換到上一個 branch。
git merge <branch name>?
?????? 合并指定branch到當(dāng)前所在的分支。
? ? --no-ff -m "提交說明信息" <branch name>? ? 用普通模式合并
? ? ? ? ? ? ? ? 參數(shù) –no-ff 表示 禁用Fast forward快進模式, 快進模式看不出來曾經(jīng)做過合并,而普通模式可以
? ? -d <branch name>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? 普通刪除分支。一般情況下,先合并完分支,然后再刪除,否則會刪除失敗
? ? -D <branch name>????????????????????????????????????????? 強行刪除分支
git rebase <target branch name>(通常是 master)? ?
?????? 在本地 master 上進行變基操作。
? ? ? ? ? 注意:merge 與 rebase 都是整合來自不同分支的修改。
? ? ? ? ? ? ? merge 會把兩個分支的最新快照以及二者最近的共同祖先進行三方合并,合并的結(jié)果是生成一個新的快照(并提交)。
? ? ? ? ? ? ? rebase 會把提交到某一分支(當(dāng)前分支)上的所有修改都轉(zhuǎn)移至另一分支(目標(biāo)分支)上,就好像“重新播放”一樣。
? ? ? ? ? 變基是將一系列提交按照原有次序依次應(yīng)用到另一分支上,而合并是把最終結(jié)果合在一起。
? ? ? ?? 簡言之:這兩種整合方法的最終結(jié)果沒有任何區(qū)別,但是變基使得提交歷史更加整潔。
? ? –ongo 目標(biāo)分支 第一分支 第二分支:選中在第二分支里但不在第一分支里的修改,將它們在目標(biāo)分支(通常是 master)上重演。
git stash?
把當(dāng)前分支的工作現(xiàn)場儲存起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作。一般適用于還沒有 commit 的分支代碼。
? ? list? ????????? 查看儲存的工作現(xiàn)場紀(jì)錄列表。
? ? apply ? ? ?? 恢復(fù)最近 stash 過的工作現(xiàn)場
? ? drop? ?????? 刪除儲存的工作現(xiàn)場
? ? pop? ??????? 相當(dāng)于上面兩條命令,恢復(fù)回到工作現(xiàn)場的同時把 stash 內(nèi)容也刪除了
? ? clear??????? 清空所有暫存區(qū)的 stash 紀(jì)錄