$ git init文件夾中生成.git版本庫,包括stage(index),還有git自動建立的分支master,指向master分支的指針HEAD指針。javascript
拆分做業java
$ git add [file1] [file2] $ git add [dir1] [dir2] $ git add . $ git commit -m "a readme file"添加、提交一步到位git
$ git commit -am "once" $ git commit -a -m "once" $ git commit [file] [folder] -m ""
$ git add xxx $ git commit --amend 編輯工具會顯示最近一次提交的提交message,能夠修改 $ git commit --amend -m $ git commit --amend --no-edit (加入--no-edit參數,會修復提交但不修改提交信息)
a. 撤銷工做區的修改,不影響緩存區shell
$ git checkout -- [file1] [file2] $ git checkout -- .b. 撤銷緩存區的修改,將修改內容放回工做區,與工做區後期修改合併(clean 或者合併2處修改)緩存
$ git reset HEAD xxx(文件名) $ git reset HEAD .
$ git status $ git diff xxx 工做區和緩存區 $ git diff --cached/staged 已經暫存起來的文件和上次提交時的快照之間的差別 $ git diff HEAD -- xxx 工做區和版本庫 注:修改並add一個版本,工做區再改回來,工做區與版本庫無差異。有待add的文件, add 後無待commit的文件了$ git log 顯示從最近到遠的提交日誌 $ git log --stat 顯示commit歷史,以及每次commit發生變動的文件 $ git log -p [files] 顯示指定文件的每次commit的diff $ git log -p -2 經常使用 -p 選項展開顯示每次提交的內容差別,用 -2 則僅顯示最近的兩次更新, 還有其餘參數可選 $ git log -[number] --pretty --oneline 顯示最近number次的log $ git log --pretty=oneline 漂亮地展現 $ git log --graph 分支合併圖 $ git log --graph --pretty=oneline --abbrev-commit 分支合併狀況
HEAD表示當前版本,即最新的提交,HEAD^上一個版本, HEAD^^, HEAD~100, clean。(--soft不會clean,modified)app
$ git reset --hard HEAD^ $ git reset --hard HEAD 等價於 clean掉工做區和緩存區 $ git reset --hard [commit_id] $ git reset [commit_id] (非clean,有待添加的文件)
當回退到某個版本x後,想回來,發現git log中,看不到x以後的commit記錄(x+1)。此時,工具
a. 你的命令行還沒關,你就能夠順着往上找,找到對應的commit id b. $ git reflog,找到對應的commit id$ git reset --hard 3628164
$ git stash $ git stash list 查看$ git stash apply stash內容並不刪除 $ git stash pop 恢復的同時把stash內容也刪了 $ git stash drop (.......)
$ git mv README.txt README其實,運行 git mv 就至關於運行了下面三條命令:命令行
$ mv README.txt README $ git rm README.txt $ git add README
a.從版本庫中刪除 $ git rm xxx / add commit b.誤刪了,恢復 $ git checkout -- xxx (撤銷工做區修改)若是刪除以前修改過而且已經放到暫存區域的話,則必需要用強制刪除選項 -f(譯註:即 force 的首字母),以防誤刪除文件後丟失修改的內容。
另一種狀況是,咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中。用 --cached 選項便可:指針$ git rm --cached readme.txt後面能夠列出文件或者目錄的名字,也可使用 glob 模式。比方說:日誌
$ git rm log/\*.log注意到星號 * 以前的反斜槓 ,由於 Git 有它本身的文件模式擴展匹配方式,因此咱們不用 shell 來幫忙展開(譯註:實際上不加反斜槓也能夠運行,只不過按照 shell 擴展的話,僅僅刪除指定目錄下的文件而不會遞歸匹配。上面的例子原本就指定了目錄,因此效果等同,但下面的例子就會用遞歸方式匹配,因此必須加反斜槓。)。此命令刪除全部 log/ 目錄下擴展名爲 .log 的文件。相似的好比:
$ git rm \*~會遞歸刪除當前目錄及其子目錄中全部 ~ 結尾的文件。