git 不徹底教程

概念

  • 工做目錄:當前所見,Working directory
  • 暫存區域:之後要提交到倉庫的文件,稱爲Index或者staging area
  • Git 倉庫:持久化存儲快照的地方,HEAD指針所指向的地方

Git 基本工做流程:

  1. 修改文件,會被git覺察
  2. 手動選擇修改過的文件以暫存文件。
  3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

git 設置命令

1.git config 設置本地用戶信息

git config --global user.name "John Doe"git

git config --global user.email johndoe@example.com服務器

若是使用了 --global 選項,就是全局設置的。編輯器

2.git config --list 列出全部 Git 的配置選項

3.git help [你想了解的git命令],得到詳細解釋

git 暫存操做命令

1.git init 建立倉庫

2.git status 查看git狀態

建立或修改文件,會被git發現差別,git status 能夠查看這些變更工具

3.git add [fileName] 暫存或追蹤文件

git statu查看git狀態是查看的當前git所追蹤的文件的變更狀態,之因此git不自動追蹤全部文件的緣由是給用戶的選擇空間。因此纔有暫存的存在,暫存過的文件就會被git作diff比較,進而能夠將暫存區的內容存入倉庫。加入暫存這一操做,被git稱做追蹤track。因此追蹤一個文件和暫存一個文件本質區別不大。因此都適用git add一個命令完成。若是你不知道哪些須要增長到暫存,git status會告訴你fetch

想要增長更多或者所有文件,可使用git add *或.或-A或-all,若是想要配置不須要追蹤的文件,能夠在倉庫跟目錄下建立.gitignore,來看一個實際的例子:ui

$ cat .gitignoreurl

*.[oa]指針

*~code

第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件。通常這類對象文件和存檔文件都是編譯過程當中出現的。 第二行告訴 Git 忽略全部以波浪符(~)結尾的文件orm

4.git checkout [fileName] 從暫存區取回並替換工做區文件

5.git reset [fileName] 刪除暫存區的內

6.git diff fileName 查看改了具體內容

總結:暫存一方面起到臨時保存的做用,還有追蹤的做用。經過暫存,能夠簡單的保存,可是做用有限 ,好比,你暫存了某個文件並再次作了修改,若是你從暫存區checkout後,你就再也找不到最新修改的部分了。而且,若是你屢次暫存了這個文件,暫存區只有最近一次暫存狀態,你不能查看前幾回修改的快照。因此對此需求,就須要將快照持久化,也就是commit提交到倉庫。

對git來講,有如上流程,add the file, edit the file, stage the file,remove the file咱們已經說過,完整commit提交後,本來暫存區中保存的修改了的內容就會被清空,git會認爲當前是環境是乾淨的,沒有被修改過的,緣由有二:

1.既然已經將修改持久化保存,就算清空暫存區也不會出錯。

2.若是暫存區不會清空,就能夠無限提交,顯然這是不被容許的。

git 倉庫操做命令

1.git commit -m '提交時的文字描述'

該命令能夠提交暫存區內容到倉庫,也就是將暫存區的內容持久化保存爲倉庫中的快照,成功提交後,git將打印此次提交的快照的索引號,若是你願意的話能夠記住,不少gui工具都不須要你記,有些時候,若是你以爲先把修改提交到暫存區再提交到倉庫畫蛇添足,實際上能夠一步直接將修改提交到倉庫

git commit -a -m '提交時的文字描述'

2.git mv old new

若是你移動了或者重命名了一個文件,git就認爲這是新的,實際上,咱們想讓git知道這是倉庫中的文件而不是新文件你須要git mv README.md README,爲何要讓git知道呢?

a.若是git不知道,那就認爲是新文件,

b.若是git不知道,在多人合做時,合併代碼就會出問題

3.git log 查看歷史提交

若是你只想看最近兩次的歷史,使用git log -2

若是想看歷史詳細差別,git log -p

精煉的查看歷史信息,git log --pretty=format:"%h - %an, %ar : %s"

--graph能夠可視化展現分支圖

git reflog 查看歷史操做,用於挽尊

4.git commit -amend '提交時的文字描述' 從新提交

有時你在某次提交後,發現漏提交了一些文件,或是某次提交信息不夠完善,總之你想從新編輯此次提交,你能夠作完一系列操做後使用這個命令

5.git reset --hard/soft/mix [索引號]. 切換到某一次提交

但凡你不知道你在作什麼,請操做以前必定提交後推送到遠程,在工做目錄保持乾淨的狀況下在使用這個命令。
git reset file,會將暫存區的file刪去,也能夠git reset 清空暫存區
git reset commit file,若是commit不是head,將commit的file 放入暫存區

6.git rm --cached [fileName] 刪除取消追蹤倉庫中的某個文件

若是想刪除倉庫和本地目錄的文件git rm

7.git update-index --assume-unchanged file 再也不追蹤本地某文件,而不刪除倉庫中的文件

8.git revert commit 撤銷某次提交

能夠把他當作快照head與快照head-某次commit的合併,並且會出現奇怪的衝突。不是推薦作這樣的事

9.git checkout file 撤銷文件的修改

他會先從暫存區找file,若是找不到,在當前倉庫找,找到了就用來替換工做區的文件,git checkout commit file 直接將commit的file替換工做區

git 分支操做命令

1.git branch testing 建立但不切換分支

這會在當前所在的提交節點上建立分支

2.git checkout testing 切換分支

git checkout -b testing 建立並切換分支,這個比較混淆,算做特殊用法。

git checkout -b testing origin/testing從遠程取得一個分支並在本地建立

3.查看分支

git branch 查看本地

git branch -r 查看遠程分支

git branch -a 查看全部分支

4.刪除分支

git branch -d testing

git branch -D testing 強制刪除

git branch -r -d 刪除遠程分支

5.git merge master 合併分支

開分支後,必然會作一些改動,且必然要合併到主分支上。若是當前是testing分支,git merge master就會將merge合併到testing,merge有可能會出現衝突,須要手動解決衝突,而後commit。拉取遠程分支時git pull也會作一次合併。解決衝突的工具備不少,使用vscode編輯器足以,方法很簡單,打開衝突文件便可

git 遠程倉庫操做命令

1.git clone url 克隆遠程倉庫

2.git remote 查看遠程倉庫服務器

一般origin 是默認的遠程服務器

git remote -v,查看遠程服務器url地址

3.添加和移除遠程服務器

git remote add <遠程服務器> <url地址>

git remote remove <遠程服務器>

4.拉取遠程最新代碼

git fetch origin testing 僅拉取

git pull origin testing 拉取併合並,若是已經有追蹤分支,origin能夠省略

git pull origin master --allow-unrelated-histories 拉取忽略不相關

5.跟蹤分支,本地和遠程分支的聯繫

git checkout -b testing origin/testing或是git clone建立的分支自帶了與遠程的聯繫

git branch -vv 能夠查看全部分支關聯的遠程分支

git push -u origin mastergit branch -u origin/testing 手動設置與遠程分支創建聯繫,創建關係後,git push就能夠直接推送到遠程

6.git push 推送

git push [remote-name] 分支名,等價於下面

git push [remote-name] 本地分支名:遠程分支名

若是遠程沒有該分支,會在遠程自動建立,但必須創建與遠程的聯繫

注意: 若是本地分支的最新進度<= 遠程分支,則遠程將拒絕你的push,必須先pull(也就是先merge遠程),才能push

7.刪除遠程分支

git push origin --delete testing

git branch -r -d testing

爲了正常與遠程對接,通常操做流程以下:

1.克隆遠程

git clone url

2.與遠程遠離聯繫

若是遠程建立了分支,要切換到那個分支git checkout -b tt origin/tt

若是本地建立了分支,要推送到遠程(遠程沒有這個分支),git push [remote-name] 本地分支名:遠程分支名,而後要綁定遠程分支,git branch -u origin/分支名

3.對於http形式的遠程url,最好作一下面密碼操做

若是遠程是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連用。

git圖形界面軟件推薦:

1.gitahead:三端都有,界面直觀,並且非商業無償使用。更新勤快

2.gitup:僅mac端。

相關文章
相關標籤/搜索