修改提交說明
- git commit --amend
修改最新提交的提交說明 - git rebase -i <commit-id>
修改某個歷史提交的提交說明
后悔
如果提交了不應該提交的文件,想要在服務器中將文件刪除
git rm --cached <file>
git commit --amend
如果是歷史版本,那么就把第二條更改為 git rebase -i <commit-id>在git add 之后,還沒有進行g(shù)it commit ,希望取消這一次git add,使用git reset HEAD <file>
關(guān)于git add操作
- git add -u將所有修改過的文件加入暫存區(qū)
- git add -A 將本地刪除文件和新增文件都登記到提交暫存區(qū)
- 一個修改后的文件被登記到提交暫存區(qū)后,可以繼續(xù)修改,繼續(xù)修改的內(nèi)容不會被提交,除非對此文件再執(zhí)行一次git add命令。
關(guān)于git checkout操作
用法一:git checkout [-q] [<commit>] [--] <paths> ...
用法二:git checkout [<branch>]
用法三:git checkout [-m] [[-b] --orphan <new_branch>] [<start_point>]
第一種用法的<commit>是可選項,如果省略則相當于從暫存區(qū)(index)進行檢出。所以,檢出命令主要是覆蓋工作區(qū)(如果<commit>不省略,也會替換暫存區(qū)中相應的文件)
第一種用法不會改變HEAD頭指針,主要是用于制定版本的文件覆蓋工作區(qū)中對應的文件,如果省略<commit>,則會用暫存區(qū)的文件覆蓋工作區(qū)的文件,否則用指定提交中的文件覆蓋暫存區(qū)和工作區(qū)中對應的文件。
第二種用法則會改變HEAD頭指針。之所以后面的參數(shù)寫作<branch>,是因為只有HEAD切換到一個分支才可以對提交進行跟蹤,否則仍然會進入“分離頭指針”的狀態(tài)。在“分離頭指針”狀態(tài)下的提交不能被引用關(guān)聯(lián)到,從而可能丟失。所以用法二最主要的作用就是切換到分支。如果省略<branch>則相當于對工作區(qū)進行狀態(tài)檢查。
第三種用法主要是創(chuàng)建和切換到新的分支(<new_branch>),新的分支從<start_point>指的提交開始創(chuàng)建。新分支和我們熟悉的master分支沒有什么實質(zhì)的不同,都是在refs/heads命名空間下的引用。


刪除文件
- rm <文件名> 在本地刪除一個文件,然后使用 git ls-files 可以查看到在暫存區(qū)(版本庫)中的文件仍然存在,并沒有刪除。此時使用git checkout -- <file>可以讓文件在工作區(qū)重現(xiàn)。
- 在rm <文件名>之后,使用git rm <文件名> 刪除就被加入到了暫存區(qū)。這時候執(zhí)行提交操作,就從真正意義上執(zhí)行了文件刪除。不過不要擔心,文件只是在版本庫的最新提交中被刪除了,在歷史提交中依然存在,通過git ls-files --with-tree=HEAD^可以發(fā)現(xiàn)該文件,使用git cat-file -p HEAD^:<file>可以查看在歷史版本中尚在的刪除文件的內(nèi)容。 比如刪除了a.txt文件,那么調(diào)用 git cat-file -p HEAD~1:a.txt > a.txt 或者git show HEAD~1:a.txt > a.txt 或者 git checkout HEAD~1 -- a.txt都可以把文件從版本庫恢復到工作區(qū),緩沖區(qū)中并沒有恢復該文件。
關(guān)于git reset命令
- git reset [-q] [<commit>] [--] <paths> 不會重置引用,不會改變工作區(qū),而是用指定提交狀態(tài)<commit>下的文件<paths>替換掉暫存區(qū)中的文件。例如命令git reset HEAD <paths>相當于取消之前執(zhí)行的git add <paths>命令時改變的暫存區(qū)
- git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>] 不使用<paths>的用法則會重置引用。根據(jù)不同的選項,可以對暫存區(qū)或者工作區(qū)進行重置
雜七雜八的命令
git stash 保存工作進度
然后git checkout <new_branch>就可以切換到新的分支中了
當新的工作分支修改完畢之后,再切換回當前分支 git checkout <original_branch>
再調(diào)用git stash pop恢復之前保存的工作進度git log --stat查看每次提交的文件變更統(tǒng)計
git diff查看兩個文件的差異
git reset HEAD ,暫存區(qū)的目錄樹會被版本庫master分支所指向的目錄樹替換,但是工作區(qū)的代碼沒有改變
git rm --cached <file> ,直接從暫存區(qū)刪除文件,工作區(qū)不改變
git ls-tree -l HEAD 查看版本庫中的目錄樹
git ls-filles -s 顯式暫存區(qū)的目錄樹
git clean -fd 清除當前工作區(qū)中沒有加入版本庫的文件和目錄
幫助理解的圖文

- git reset HEAD ,暫存區(qū)的目錄樹會被版本庫master分支所指向的目錄樹替換,但是工作區(qū)的代碼沒有改變
- git rm --cached <file> ,直接從暫存區(qū)刪除文件,工作區(qū)不改變
- git checkout . 或者git checkout -- <file> ,用暫存區(qū)全部的文件或者制定的文件替換工作區(qū)的文件,也就是說,工作區(qū)中還沒有被添加到暫存區(qū)的改動都會被清除
- git checkout HEAD . 或者git check out HEAD <file> 命令,會用HEAD 指向的master分支中的全部或者部分文件替換暫存區(qū)和工作區(qū)的文件,也就是說,工作區(qū)和暫存區(qū)中所有未提交的改動都會被清除

