#git速查表
Git內都只有三種狀態:已修改(modified),已暫存(staged)和已提交(committed)。已修改表示修改了某個文件,但尚未提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中;已提交表示該文件已經被安全地保存在本地數據庫中了。
對應三個工做區域:Git 的工做目錄,暫存區域,以及本地倉庫。
所謂的暫存區域只不過是個簡單的文件,通常都放在 Git 目錄中。有時候人們會把這個文件叫作索引文件,不過標準說法仍是叫暫存區域。
基本的 Git 工做流程以下:
1. 在工做目錄中修改某些文件。
1. 對修改後的文件進行快照,而後保存到暫存區域。
1. 提交更新,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。
咱們能夠從文件所處的位置來判斷狀態:若是是Git目錄中保存着的特定版本文件,就屬於已提交狀態;若是做了修改並已放入暫存區域,就屬於已暫存狀態;若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態。
bash
#設置全局的用戶名及郵箱
$ git config --global user.name waile23
$ git config --global user.email waile23@163.com
#建立版本庫
$ git clone <url> #克隆遠程版本庫
$ git init #初始化本地版本庫
#修改和提交
$ git status #查看狀態
$ git diff #查看變動內容
$ git add . #將全部已修改的文件保存到暫存區,文件變爲已暫存
$ git add <file> #將指定的已修改的文件保存到暫存區,文件變爲已暫存
$ git add -u #將全部已經修改的文件保存到暫存區,文件變爲已暫存
$ git commit -m 「commit message」 #提交已暫存文件
$ git commit --amend #修改最後一次提交
$ git rm <file> #取消git對文件的版本控制.
$ git rm --cached <file> #取消git對文件的版本控制,-–cached選項容許你把文件保留在你的工做目錄中.(經常使用)
$ git mv <old> <new> #重命名文件(先刪除舊文件,再添加新文件)(基本不用)。
#日誌
$ git log --oneline --stat #查看日誌,能夠查看文件列表 顯示每次更新的修改文件的統計信息
$ git log -p #按補丁顯示每一個更新間的差別
#撤消和重作
$ git checkout HEAD <file> #撤消指定的未提交(已修改,已暫存)文件的修改內容,即保證工做目錄中的狀態與已提交狀態一致。
$ git revert <commit> #回滾至指定的提交(還沒弄明白)
$ git reset HEAD <file> #取消已暫存的文件。即,撤銷先前"git add"的操做。
$ git reset --hard HEAD #把工做目錄中全部未提交(已修改,已暫存)的內容清空(固然這不包括未置於版控制下的文件 untracked files)。
$ git reset --hard <commit_id>(哈希值的前幾個字符)完全回退到某個版本,本地的源碼也會變爲該版本的內容。
根據–soft –mixed –hard,會對working tree和index和HEAD進行重置:
git reset –mixed:此爲默認方式,不帶任何參數的git reset,即時這種方式,它回退到某個版本,只保留源碼,回退commit和index信息
git reset –soft:回退到某個版本,只回退了commit的信息,不會恢復到index file一級。若是還要提交,直接commit便可
git reset –hard:完全回退到某個版本,本地的源碼也會變爲上一個版本的內容
技巧: $ git reset --hard <commit_id> 與 git push origin HEAD --force 合用,完全回退到某個版本並提交服務器(刪除指定版本,在提交錯誤後可使用該方法刪除錯誤提交)
#分支與標籤
$ git branch #顯示全部本地分支
$ git branch <new-branch> #建立新分支
$ git checkout <branch/tag> #切換到指定分支或標籤
$ git checkout -b <branch/tag> #至關於$ git branch <branch/tag> $git checkout <branch/tag>
$ git branch -d <branch> #刪除本地分支
$ git tag #列出全部本地標籤
$ git tag <tagname> #基於最新提交建立標籤
$ git tag -d <tagname> #刪除標籤
#合併與衍合
$ git merge <branch> #合併指定分支到當前分支,新的版本
$ git rebase <branch> #衍合指定分支到當前分支,造成線性
#merge操做會生成一個新的節點,以前的提交分開顯示。而rebase操做不會生成新的節點,是將兩個分支融合成一個線性的提交。
#想要更好的提交樹,使用rebase操做會更好一點。
#遠程操做
$ git remote -v #查看遠程版本庫信息
$ git remote show <remote> #查看指定遠程版本庫信息
$ git remote add <remote> <url> #添加遠程版本庫
$ git fetch <remote> #從遠程庫獲取代碼
$ git pull <remote> <branch> #下載代碼及快速合併
$ git pull <remote> <branch>:<local-branch> 取回remote的branch分支,與本地的local-branch分支合併,注意冒號後不能有空格
$ git push <remote> <branch> #上傳代碼及快速合併
$ git push <remote> :<branch/tag-name> #刪除遠程分支或標籤
$ git push --tags #上傳全部標籤
#生成ssh key
ssh-keygen -t rsa -C "郵箱" #生成ssh key,而後根據提示連續回車便可在~/.ssh目錄下獲得id_rsa和id_rsa.pub兩個文件,id_rsa.pub文件裏存放的就是咱們要使用的key。
ssh -T git@github.com #測試是否配置成功
##參考
[來源](https://gitcafe.com/GitCafe/Help/wiki/Git-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5%E8%A1%A8#wiki)
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
http://www.ituring.com.cn/article/202419
http://www.cnblogs.com/renkangke/archive/2013/05/31/conquerAndroid.html
html