常用的git命令整理

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ì)錄

git push origin <branch name>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?????? 把該分支上的所有本地提交推送到遠程庫對應(yīng)的遠程分支上。

git checkout <branch name> origin/<branch name>?

? ? ?? 如果遠程有某一個分支而本地沒有,把遠程的這個分支遷到本地。

git checkout -b <branch name> origin/<branch name> ? ? ? ? ? ?

?????? 把遠程分支遷到本地順便切換到該分支。

git pull? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

??????? 抓取遠程庫最新提交,拉取并合并。

git fetch? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

???????? 沒有 merge 的 pull。

git branch --set-upstream <branch name> origin/<branch name>??

??????? 建立本地分支和遠程分支的關(guān)聯(lián)。

git submodule update --recursive? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

??????? 第三方依賴與遠程同步,還可以在最后添加 -f 參數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容