你必須知道的Git命令

這篇筆記是為了學習Git知識而收集總結的筋现,主要是看受一篇帖子《你可能不知道的15條Git命令》的影響唐础,才想記錄這篇筆記的,如有雷同矾飞,純屬巧合一膨。

Git?是一個分布式版本控制軟件, 最初目的是為更好地管理Linux內核開發(fā)而設計洒沦。

來源:維基百科 - Git

Git是一個軟件豹绪,它允許你通過提交對一個系統(tǒng)(或一組)文件的歷史進行注釋。這些提交便是在給定時間點對系統(tǒng)做出的差異“快照”申眼。

1.?Git?配置

--system #系統(tǒng)級別

--global #用戶全局

--local #單獨一個項目

git config --global user.name "xxxx" #用戶名

git config --global user.email "xxxx@xxx.com" #郵箱

git config --list # 列舉所有配置

連接遠程倉庫github

? ? ? ? 1.創(chuàng)建SSH Key

????????ssh-keygen -t rsa -C <youremail@example.com>

? ? ? ? 2.登陸GitHub瞒津,打開Account settings?->?SSH Keys?->?Add SSH Key,填上任意Title括尸,在Key文本框里粘貼id_rsa.pub文件的內容

? ? ? ? 3.測試是否連接????

? ??????ssh git@github.com

幾個概念:

工作區(qū)(Working Directory): 你在電腦里能看到的目錄巷蚪。

暫存區(qū)(stage / index): 保存了下次將提交的文件列表信息, 一般存放在?.git目錄下 下的index文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)濒翻。

版本庫(Repository): 工作區(qū)有一個隱藏目錄.git钓辆,這個不算工作區(qū),而是Git的版本庫肴焊。

遠程倉庫(Remote)


阮一峰老師對Git工作區(qū)前联、暫存區(qū)、版本庫娶眷、遠程倉庫的解釋


Runoob對Git工作區(qū)似嗤、暫存區(qū)、版本庫届宠、遠程倉庫的解釋

忽略文件配置:添加.gitignore文件

文件?.gitignore?的格式規(guī)范如下:

? ? ? ? 1.所有空行或者以?#?開頭的行都會被 Git 忽略烁落。

? ? ? ? 2.可以使用標準的 glob 模式匹配。

? ? ? ? 3.匹配模式可以以(/)開頭防止遞歸豌注。

? ? ? ? 4.匹配模式可以以(/)結尾指定目錄伤塌。

? ? ? ? 5.要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反轧铁。

2. 創(chuàng)建版本庫

版本庫又名倉庫每聪,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來药薯,每個文件的修改绑洛、刪除,Git都能跟蹤童本,以便任何時刻都可以追蹤歷史真屯,或者在將來某個時刻可以“還原”。

git clone url # clone遠程倉庫

git init # 初始化本地版本庫

3.?Git?分支

master: 默認開發(fā)分支

HEAD: 當前開發(fā)分支

HEAD^([n]):?HEAD的第n次父提交提交,?^相當于^1

HEAD~([n]):?HEAD的第n個祖先提交

origin: 默認遠程版本庫

master:?master分支

*:?HEAD穷娱,當前活躍(開發(fā))分支

br1_c1:?br1分支的提交第一次提交

br1_c1_c1:?br1_c1的第一次提交

如何區(qū)分`^`和`~`绑蔫?據(jù)上圖示知,當前開發(fā)分支是`master`泵额,即`HEAD`指向`master`,`c1`,`c2`,`c3`是`master`的三次父提交`HEAD^ -> c1`晾匠,`HEAD^2 -> c2`,`HEAD^3 -> c3`,`HEAD~ -> c1`梯刚,`HEAD~2 -> c1_c1`


git branch # 查看分支

git branch -r #查看遠程分支?

git branch --contains?# 此命令將顯示包含特定提交的所有分支凉馆。

git branch # 創(chuàng)建分支

git checkout # 切換分支

git checkout -b # 創(chuàng)建 + 切換分支

git branch -m <old-name> <new-name>?# 重命名本地分支

git branch -m <new-name> # 重命名剛切換的新分支

# 重命名遠程分支: 一旦在本地重命名了分支,您需要先遠程刪除該分支亡资,然后再次推送重命名的分支澜共。

git push origin :<old-name>

git push origin <new-name>

git merge # 合并某分支到當前分支

git branch -d # 刪除分支

git branch -D # 強制刪除分支

# 刪除遠程分支(先在本地刪除該分支),原理是把一個空分支push到server上锥腻,相當于刪除該分支嗦董。

git push origin ::<name>

Note:?checkout只會移動HEAD指針,reset會改變HEAD的引用值

4. 查看

git status # 查看狀態(tài)

git diff <filename> # 查看修改內容

git diff <first_branch>..<second_branch> # 顯示兩次提交之間的差異

git diff --shortstat "@{n day ago}" # 顯示n天的代碼數(shù)量

git diff --cached(--staged) # 查看已經暫存起來的變化

git show <commit>:<filename> # 顯示某次提交時瘦黑,某個文件的內容

git show <commit> # 顯示某次提交的元數(shù)據(jù)和內容變化

git show --name-only <commit> # 顯示某次提交發(fā)生變化的文件

git reflog # 顯示當前分支的最近幾次提交

git blame <filename> # 顯示指定文件修改信息

5. 修改

git add <filename>|<div> # 添加指定文件, 指定目錄(包括子目錄)到暫存區(qū)

git add . # 添加當前目錄的所有文件到暫存區(qū)

# -p(或-patch)允許交互選擇要提交的每個跟蹤文件的各個部分京革。 這樣每個提交只包含相關的更改。git add -p

git mv <old-name> <new-name> # 文件改名

git rm --cached <file> # 停止追蹤指定文件幸斥,但該文件會保留在工作區(qū)

git rm -f <filename> # 強制刪除選項 -f

6. 提交

git commit -m 'message' # 提交版本庫

git commit -a -m 'message' # 添加所有修改文件到暫存區(qū)匹摇,并提交版本庫(不包括新增文件)

git commit --amend -m # 修改最后一次提交,如果代碼沒有任何新變化甲葬,則用來改寫上一次commit的提交信息

Git Commit

7. 撤銷廊勃、版本回滾?

git reset --hard HEAD # 撤銷工作目錄中暫存的所有未提交文件的修改內容

git reset --keep [commit] # 重置當前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變

git reset [file] # 重置暫存區(qū)的指定文件经窖,與上一次commit保持一致坡垫,但工作區(qū)不變

git commit --amend # 將暫存區(qū)中的文件提交

git checkout [file] # 恢復暫存區(qū)的指定文件到工作區(qū)

git checkout -p # --patch還可用于選擇性地丟棄每個被跟蹤文件的部分。

git checkout - ?# 此命令允許您快速切換到先前檢出的分支画侣。 一般說來 - 是前一個分支的別名冰悠。 它也可以與其他命令一起使用。

git checkout . # 還原所有本地更改配乱,如果您確定可以丟棄所有本地更改溉卓,則可以使用皮迟。

git checkout HEAD <filename> ?# 取消指定未提交文件的修改內容

git checkout --patch <filename> # 撤消對文件的修改

git revert <commit_id> # 撤銷指定提交

8. 提交歷史

常見參數(shù)選項:

-p: 顯示每次提交的內容差異。

—stat: 顯示每次更新的文件修改統(tǒng)計信息的诵。

—shortstat: 只顯示?—stat?中最后的行數(shù)修改添加移除統(tǒng)計万栅。

--name-only?僅在提交信息后顯示已修改的文件清單佑钾。

--name-status?顯示新增西疤、修改、刪除的文件清單休溶。

--abbrev-commit: 僅顯示?SHA-1?的前幾個字符代赁,而非所有的 40 個字符。

--relative-date: 使用較短的相對時間顯示(比如兽掰,2 weeks ago)芭碍。

--graph: 顯示?ASCII?圖形表示的分支合并歷史。

—pretty=(oneline,short,medium(默認值),full,fuller,email,raw,format): 這個選項可以指定使用不同于默認格式的方式展示提交歷史孽尽。 這個選項有一些內建的子選項供你使用窖壕。

- `oneline`: 將每個提交放在一行顯示,查看的提交數(shù)很大時非常有用杉女。- [`format`](https://git-scm.com/book/zh/v2/Git-基礎-查看提交歷史#rpretty_format): 列出了常用的格式占位符寫法及其代表的意義瞻讽。

—oneline:?--pretty=oneline --abbrev-commit?的簡化用法。

--date= (relative|local|default|iso|rfc|short|raw):定制出現(xiàn)日期格式熏挎。

常見輸出參數(shù):

-n: 僅顯示最近的 n 條提交

—since,?—after: 僅顯示指定時間之后的提交

--until,?—before: 僅顯示指定作者相關的提交速勇。

—author: 僅顯示指定提交者相關的提交。

—grep: 僅顯示含指定關鍵字的提交

-S: 僅顯示添加或移除了某個關鍵字的提交

默認不用任何參數(shù)的話坎拐,git log?會按提交時間列出所有的更新烦磁,最近的更新排在最上面。

git log # 查看所有提交歷史

git log -p -n # 查看最近提交的n條歷史

git log -p -n <filename> # 查看指定文件最近提交的n條歷史

git log alias配置

git ????log --pretty=format:'%s %C(bold blue)(%an)%Creset' --abbrev-commitgit?

git????log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

#設置git alias?

git config --global alias.slg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

9. 標簽

Git?可以給歷史中的某一個提交打上標簽哼勇,以示重要都伪。

Git?使用兩種主要類型的標簽:輕量標簽(lightweight)與附注標簽(annotated)。

輕量標簽: 很像一個不會改變的分支 - 它只是一個特定提交的引用积担。它本質上是將提交校驗和存儲到一個文件中 - 沒有保存任何其他信息院溺。

附注標簽是存儲在?Git?數(shù)據(jù)庫中的一個完整對象。 它們是可以被校驗的磅轻;其中包含打標簽者的名字珍逸、電子郵件地址、日期時間聋溜;還有一個標簽信息谆膳;并且可以使用?GNU Privacy Guard(GPG)簽名與驗證。 通常建議創(chuàng)建附注標簽撮躁,這樣你可以擁有以上所有信息漱病;但是如果你只是想用一個臨時的標簽,或者因為某些原因不想要保存那些信息,輕量標簽也是可用的杨帽。

-a: 創(chuàng)建附注標簽

-m?選項指定了一條將會存儲在標簽中的信息漓穿。 如果沒有為附注標簽指定一條信息,Git?會運行編輯器要求你輸入信息注盈。

git tag # 列出已有的標簽

git tag <tagname> # 創(chuàng)建標簽晃危,-a 創(chuàng)建附注標簽

git tag -d <tagname> # 刪除掉你本地倉庫上的標簽

git show <tagname> # 查看標簽信息與對應的提交信息

git push origin <tagname> # 推送標簽到遠程倉庫服務器上

git push origin --tags # 一次性推送所有不在遠程倉庫服務器上的標簽

9. 標簽

Git?可以給歷史中的某一個提交打上標簽,以示重要老客。

Git?使用兩種主要類型的標簽:輕量標簽(lightweight)與附注標簽(annotated)僚饭。

輕量標簽: 很像一個不會改變的分支 - 它只是一個特定提交的引用。它本質上是將提交校驗和存儲到一個文件中 - 沒有保存任何其他信息胧砰。

附注標簽是存儲在?Git?數(shù)據(jù)庫中的一個完整對象鳍鸵。 它們是可以被校驗的;其中包含打標簽者的名字尉间、電子郵件地址偿乖、日期時間;還有一個標簽信息哲嘲;并且可以使用?GNU Privacy Guard(GPG)簽名與驗證贪薪。 通常建議創(chuàng)建附注標簽,這樣你可以擁有以上所有信息撤蚊;但是如果你只是想用一個臨時的標簽古掏,或者因為某些原因不想要保存那些信息,輕量標簽也是可用的侦啸。

-a: 創(chuàng)建附注標簽

-m?選項指定了一條將會存儲在標簽中的信息槽唾。 如果沒有為附注標簽指定一條信息,Git?會運行編輯器要求你輸入信息光涂。

git tag # 列出已有的標簽

git tag <tagname> # 創(chuàng)建標簽庞萍,-a 創(chuàng)建附注標簽

git tag -d <tagname> # 刪除掉你本地倉庫上的標簽

git show <tagname> # 查看標簽信息與對應的提交信息

git push origin <tagname> # 推送標簽到遠程倉庫服務器上

git push origin --tags # 一次性推送所有不在遠程倉庫服務器上的標簽

10. 變基

merge: 用來合并一個或者多個分支到你已經檢出的分支中, 然后它將當前分支指針移動到合并結果上忘闻,現(xiàn)有分支不會被修改钝计。

rebase: 通常稱之為“衍合”,它通過修改提交歷史來對比雙方的commit齐佳,然后找出不同的去緩存私恬,然后在去push,修改你的commit歷史炼吴。

cherry-pick: 用于將在其他分支上的 commit 修改本鸣,移植到當前的分支(HEAD),?-x?參數(shù),表示保留原提交的作者信息進行提交硅蹦。

git merge <branch> # 合并指定分支到當前分支

git rebase <branch> # 衍合指定分支到當前分支

# 用于將在其他分支上的 commit 修改荣德,移植到當前的分支(HEAD), <start-commit-id>…<end-commit-id>左開右閉闷煤,<start-commit-id>^…<end-commit-id>全閉git cherry-pick …

11. 儲藏與清理

當你在項目的一部分上已經工作一段時間后,所有東西都進入了混亂的狀態(tài)涮瞻,而這時你想要切換到另一個分支做一點別的事情鲤拿。 問題是,你不想僅僅因為過會兒回到這一點而為做了一半的工作創(chuàng)建一次提交署咽。

儲藏會處理工作目錄的臟的狀態(tài) - 即近顷,修改的跟蹤文件與暫存改動 - 然后將未完成的修改保存到一個棧上,而你可以在任何時候重新應用這些改動艇抠。

git add . && git stash # 將新的儲藏推送到棧上

git stash save 'message' # 儲藏修改幕庐,并留下stash信息

# -p(或-patch)允許交互選擇要提交的每個跟蹤文件的各個部分久锥。 這樣每個提交只包含相關的更改家淤。git stash -p?

# 默認情況下,當存儲時瑟由,不包括未跟蹤的文件絮重。 為了更改該行為并包含這些文件,您需要使用-u參數(shù)歹苦。 還有-a(-all)可以完全存儲未跟蹤和忽略的文件青伤,這可能是您通常不需要的東西。git stash -u

git stash list # 查看棧中所有暫存

git stash apply <stash_id> # 恢復復對應編號暫存到工作區(qū)殴瘦,如果不指定編號為棧頂?shù)暮萁牵⒁猓哼@些暫存還在棧中

git stash pop <stash_id> #將棧頂?shù)臅捍妫謴偷焦ぷ鲄^(qū)蚪腋,并從棧中彈出丰歌,注意:這些暫存不在棧中

git stash drop <stash_id> # 移除的儲藏在棧中的東西

git stash clear #清空暫存棧

git stash branch <branch_name> # 從儲藏創(chuàng)建一個分支

12. 遠程操作

遠程倉庫是指托管在因特網或其他網絡中的你的項目的版本庫。

git remote # 查看已配置的遠程倉庫服務器

git remote -v # 指定選項 -v屉凯,會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL立帖。

git remote show <remote-name> # 查看制定遠程倉庫的更多信息

git remote add <shortname> <url> # 添加一個新的遠程 Git 倉庫

git remote rm <name> # 移除遠程倉庫

git remote rename <oldname> <newname># 重命名遠程倉庫

git fetch <remote-name> # 從遠程倉庫中拉取數(shù)據(jù)

# 下載代碼及快速合并, 當你想拉取origin服務器上的當前分支名的代碼時,可簡寫git pullgit pull <remote-name> <branch-name>

# 第一次推送到遠程倉庫悠砚,--set-upstream可簡寫為-ugit push --set-upstream <remote-name> <branch-name>

# 推送到遠程倉庫, 當你想將當前開發(fā)分支名推送到 origin 服務器晓勇,可簡寫為git pushgit push <remote> <branch-name>?

git push [remote] --force # 強行推送當前分支到遠程倉庫,即使有沖突?

git push [remote] --all # 推送所有分支到遠程倉庫?

git push : # 刪除遠程分支或標簽?

git push --tag # 上傳所有標簽?

13. 沖突

# 一次打開所有沖突的文件,重新綁定可能會導致沖突灌旧,以下命令將打開需要您幫助解決這些沖突的所有文件绑咱。git diff --name-only --diff-filter=U | uniq | xargs $EDITOR

從本地初始化到上傳到GitHub遠程倉庫的一般步驟

git init

git add .

git commit -m 'hint message'

git remote add origin 'your project repositories href on github'

git pull origin master

git push -u origin master

原文地址:https://segmentfault.com/a/1190000019116365

原文作者:RainyK1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枢泰,隨后出現(xiàn)的幾起案子描融,更是在濱河造成了極大的恐慌,老刑警劉巖宗苍,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稼稿,死亡現(xiàn)場離奇詭異薄榛,居然都是意外死亡,警方通過查閱死者的電腦和手機让歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門敞恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谋右,你說我怎么就攤上這事硬猫。” “怎么了改执?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵啸蜜,是天一觀的道長。 經常有香客問我辈挂,道長衬横,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任终蒂,我火速辦了婚禮蜂林,結果婚禮上,老公的妹妹穿的比我還像新娘拇泣。我一直安慰自己噪叙,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布霉翔。 她就那樣靜靜地躺著睁蕾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪债朵。 梳的紋絲不亂的頭發(fā)上子眶,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音葱弟,去河邊找鬼壹店。 笑死,一個胖子當著我的面吹牛芝加,可吹牛的內容都是我干的硅卢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼藏杖,長吁一口氣:“原來是場噩夢啊……” “哼将塑!你這毒婦竟也來了?” 一聲冷哼從身側響起蝌麸,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤点寥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后来吩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敢辩,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蔽莱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戚长。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗冷。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖同廉,靈堂內的尸體忽然破棺而出仪糖,到底是詐尸還是另有隱情,我是刑警寧澤迫肖,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布锅劝,位于F島的核電站,受9級特大地震影響蟆湖,放射性物質發(fā)生泄漏故爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一帐姻、第九天 我趴在偏房一處隱蔽的房頂上張望稠集。 院中可真熱鬧奶段,春花似錦饥瓷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹲缠,卻和暖如春棺克,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背线定。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工娜谊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斤讥。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓纱皆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芭商。 傳聞我的和親對象是個殘疾皇子派草,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348