git config
設置本地用戶信息git config --global user.name "John Doe"
git
git config --global user.email johndoe@example.com
服務器
若是使用了 --global 選項,就是全局設置的。編輯器
git config --list
列出全部 Git 的配置選項git help [你想了解的git命令]
,得到詳細解釋git init
建立倉庫git status
查看git狀態建立或修改文件,會被git發現差別,git status
能夠查看這些變更工具
git add [fileName]
暫存或追蹤文件git statu查看git狀態是查看的當前git所追蹤的文件的變更狀態,之因此git不自動追蹤全部文件的緣由是給用戶的選擇空間。因此纔有暫存的存在,暫存過的文件就會被git作diff比較,進而能夠將暫存區的內容存入倉庫。加入暫存這一操做,被git稱做追蹤track。因此追蹤一個文件和暫存一個文件本質區別不大。因此都適用git add一個命令完成。若是你不知道哪些須要增長到暫存,git status會告訴你fetch
想要增長更多或者所有文件,可使用git add *或.或-A或-all,若是想要配置不須要追蹤的文件,能夠在倉庫跟目錄下建立.gitignore,來看一個實際的例子:ui
$ cat .gitignore
url
*.[oa]
指針
*~
code
第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件。通常這類對象文件和存檔文件都是編譯過程當中出現的。 第二行告訴 Git 忽略全部以波浪符(~)結尾的文件orm
git checkout [fileName]
從暫存區取回並替換工做區文件git reset [fileName]
刪除暫存區的內git diff fileName
查看改了具體內容總結:暫存一方面起到臨時保存的做用,還有追蹤的做用。經過暫存,能夠簡單的保存,可是做用有限 ,好比,你暫存了某個文件並再次作了修改,若是你從暫存區checkout後,你就再也找不到最新修改的部分了。而且,若是你屢次暫存了這個文件,暫存區只有最近一次暫存狀態,你不能查看前幾回修改的快照。因此對此需求,就須要將快照持久化,也就是commit提交到倉庫。
對git來講,有如上流程,add the file, edit the file, stage the file,remove the file咱們已經說過,完整commit提交後,本來暫存區中保存的修改了的內容就會被清空,git會認爲當前是環境是乾淨的,沒有被修改過的,緣由有二:
1.既然已經將修改持久化保存,就算清空暫存區也不會出錯。
2.若是暫存區不會清空,就能夠無限提交,顯然這是不被容許的。
git commit -m '提交時的文字描述'
該命令能夠提交暫存區內容到倉庫,也就是將暫存區的內容持久化保存爲倉庫中的快照,成功提交後,git將打印此次提交的快照的索引號,若是你願意的話能夠記住,不少gui工具都不須要你記,有些時候,若是你以爲先把修改提交到暫存區再提交到倉庫畫蛇添足,實際上能夠一步直接將修改提交到倉庫
git commit -a -m '提交時的文字描述'
git mv old new
若是你移動了或者重命名了一個文件,git就認爲這是新的,實際上,咱們想讓git知道這是倉庫中的文件而不是新文件你須要git mv README.md README
,爲何要讓git知道呢?
a.若是git不知道,那就認爲是新文件,
b.若是git不知道,在多人合做時,合併代碼就會出問題
git log
查看歷史提交若是你只想看最近兩次的歷史,使用git log -2
,
若是想看歷史詳細差別,git log -p
精煉的查看歷史信息,git log --pretty=format:"%h - %an, %ar : %s"
,
--graph
能夠可視化展現分支圖
git reflog
查看歷史操做,用於挽尊
git commit -amend '提交時的文字描述'
從新提交有時你在某次提交後,發現漏提交了一些文件,或是某次提交信息不夠完善,總之你想從新編輯此次提交,你能夠作完一系列操做後使用這個命令
git reset --hard/soft/mix [索引號]
. 切換到某一次提交但凡你不知道你在作什麼,請操做以前必定提交後推送到遠程,在工做目錄保持乾淨的狀況下在使用這個命令。
git reset file
,會將暫存區的file刪去,也能夠git reset 清空暫存區
git reset commit file
,若是commit不是head,將commit的file 放入暫存區
git rm --cached [fileName]
刪除取消追蹤倉庫中的某個文件若是想刪除倉庫和本地目錄的文件git rm
能夠把他當作快照head與快照head-某次commit的合併,並且會出現奇怪的衝突。不是推薦作這樣的事
他會先從暫存區找file,若是找不到,在當前倉庫找,找到了就用來替換工做區的文件,git checkout commit file 直接將commit的file替換工做區
git branch testing
建立但不切換分支這會在當前所在的提交節點上建立分支
git checkout testing
切換分支git checkout -b testing
建立並切換分支,這個比較混淆,算做特殊用法。
git checkout -b testing origin/testing
從遠程取得一個分支並在本地建立
git branch
查看本地
git branch -r
查看遠程分支
git branch -a
查看全部分支
git branch -d testing
git branch -D testing
強制刪除
git branch -r -d
刪除遠程分支
git merge master
合併分支開分支後,必然會作一些改動,且必然要合併到主分支上。若是當前是testing分支,git merge master就會將merge合併到testing,merge有可能會出現衝突,須要手動解決衝突,而後commit。拉取遠程分支時git pull也會作一次合併。解決衝突的工具備不少,使用vscode編輯器足以,方法很簡單,打開衝突文件便可
git clone url
克隆遠程倉庫git remote
查看遠程倉庫服務器一般origin 是默認的遠程服務器
git remote -v
,查看遠程服務器url地址
git remote add <遠程服務器> <url地址>
git remote remove <遠程服務器>
git fetch origin testing
僅拉取
git pull origin testing
拉取併合並,若是已經有追蹤分支,origin能夠省略
git pull origin master --allow-unrelated-histories
拉取忽略不相關
git checkout -b testing origin/testing
或是git clone
建立的分支自帶了與遠程的聯繫
git branch -vv
能夠查看全部分支關聯的遠程分支
git push -u origin master
, git branch -u origin/testing
手動設置與遠程分支創建聯繫,創建關係後,git push就能夠直接推送到遠程
git push
推送git push [remote-name] 分支名
,等價於下面
git push [remote-name] 本地分支名:遠程分支名
若是遠程沒有該分支,會在遠程自動建立,但必須創建與遠程的聯繫
注意: 若是本地分支的最新進度<= 遠程分支,則遠程將拒絕你的push,必須先pull(也就是先merge遠程),才能push
git push origin --delete testing
git branch -r -d testing
git clone url
若是遠程建立了分支,要切換到那個分支git checkout -b tt origin/tt
若是本地建立了分支,要推送到遠程(遠程沒有這個分支),git push [remote-name] 本地分支名:遠程分支名
,而後要綁定遠程分支,git branch -u origin/分支名
若是遠程是https鏈接的,每次都須要輸入密碼,爲了不這樣,能夠克隆時手動改寫一下url如,http://用戶名:密碼@遠程倉庫httpsurl
,固然你也能夠改寫remote地址達到一樣效果:git remote set-url http://用戶名:密碼@遠程倉庫httpsurl
。
使用git reset --hard 並不能徹底保證當前工做目錄的乾淨,好比你從遠程合併了master分支,出現了衝突,沒提交直接reset到合併以前的commit,reset以後發現多出來了好多未跟蹤的文件或文件夾,爲何會有多出來的文件,由於你在當前commit上,而你以前合併沒提交,因此遠程的commit並未成功寫入本地,也就是說遠程追蹤的有些文件還沒在本地追蹤,你reset的時候,本地倉庫只管你追蹤的文件,多出來無論,若是要徹底恢復到該commit的狀態,git clean就好了,它將移除未追蹤的文件,git clean -df能夠把目錄一塊兒刪了,因此git reset 一般和git clean連用。