git使用教程之git基礎

1 獲取Git倉庫

  1. 在現有目錄中初始化倉庫
git init
  1. 克隆現有的倉庫
git clone https://github.com/yangwang12345/node_test.git
git clone -b 分知名 路徑 //切換到其餘遠程分支

Git 支持多種數據傳輸協議
https:// 協議
git:// 協議
SSH 傳輸協議 : user@server:path/to/repo.gitjavascript

2 記錄每次更新到倉庫


每個文件都不外乎這兩種狀態:已跟蹤(tracked)或未跟蹤(untracked)
初始化一個倉庫以後,文件處於未修改(Unmodified),編輯文件以後處於修改(Modifyed),將修改的文件放入暫存區(Staged),而後提交全部暫存區的修改,造成了Git的生命週期html

2.1 檢查當前文件狀態
git  status

若是有修改的文件,此時不被跟蹤,將提示咱們用git add使它被跟蹤,git add能夠用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等;運行了 git add 以後又做了修訂的文件,須要從新運行 git add 把最新版本從新暫存起來:java

git add xxx文件名

用git status會看到文件已被跟蹤,並處於暫存狀態node

2.2 狀態簡覽
$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

?? 新添加的未跟蹤文件
A 新添加到暫存區中的文件
MM Rakefile 在工做區被修改並提交到暫存區後又在工做區中被修改了,因此在暫存區和工做區都有該文件被修改了的記錄。
M 該文件被修改了可是還沒放入暫存區
M 該文件被修改了並放入了暫存區git

2.3 忽略文件

新建一個.gitignore文件github

touch .gitignore
*.[oa]  //忽略全部以 .o 或 .a 結尾的文件
*~       //忽略全部以波浪符(~)結尾的文件

文件 .gitignore 的格式規範以下:正則表達式

  • 全部空行或者以 # 開頭的行都會被 Git 忽略。
  • 可使用標準的 glob 模式匹配。
  • 匹配模式能夠以(/)開頭防止遞歸。
  • 匹配模式能夠以(/)結尾指定目錄。
  • 要忽略指定模式之外的文件或目錄,能夠在模式前加上驚歎號(!)取反。
    glob模式: glob 模式是指 shell 所使用的簡化了的正則表達式。 星號()匹配零個或多個任意字符;[abc] 匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c);問號(?)只匹配一個任意字符;若是在方括號中使用短劃線分隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)。 使用兩個星號() 表示匹配任意中間目錄,好比a/**/z 能夠匹配 a/z, a/b/z 或 a/b/c/z等。
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

2.4查看已暫存和未暫存的修改

git diff

查看已暫存的將要添加到下次提交裏的內容,能夠用 git diff --cached 命令shell

2.5提交更新

git commit 
git commit -m "信息會一行顯示"

git commit 會進入vim編輯器,i編輯,esc退出編輯模式 :wq保存並退出vim

2.6 跳過使用暫存區域

$ git commit -a -m 'added xxx'

給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交服務器

2.7移除文件

移除某個文件,就必需要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),而後提交.
能夠用 git rm 命令完成此項工做,並連帶從工做目錄中刪除指定的文件,這樣之後就不會出如今未跟蹤文件清單中了。
若是刪除以前修改過而且已經放到暫存區域的話,則必需要用強制刪除選項 git rm -f xxx,這樣的數據不能被 Git 恢復。

git rm xxx

咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中,當你忘記添加 .gitignore 文件,不當心把一個很大的日誌文件或一堆 .a 這樣的編譯生成文件添加到暫存區時,git rm --cached或者glob模式

$ git rm --cached README
$ git rm log/\*.log
$ git rm \*~

2.8 移動文件

重命名file_from 爲file_to

$ git mv file_from file_to
$ mv README.md README  //等價於
$ git rm README.md
$ git add README

3 查看提交歷史

git log
git log -p -2

-p,用來顯示每次提交的內容差別。 你也能夠加上 -2 來僅顯示最近兩次提交

4 撤銷操做

$ git commit --amend

若是自上次提交以來你還未作任何修改,那麼快照會保持不變,而你所修改的只是提交信息
你提交後發現忘記了暫存某些須要的修改

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

取消暫存 CONTRIBUTING.md 文件

$ git reset HEAD CONTRIBUTING.md

撤銷到某個歷史版本commit

git log
git reset --hard xxx(commit歷史快照)

撤銷修改,還原成上次提交時的樣子

git checkout -- CONTRIBUTING.md

撤銷全部add的文件

git reset HEAD .

5 遠程倉庫的使用

5.1 遠程倉庫的使用
$ git remote
origin  //遠程服務器的簡寫
$ git remote -v //會顯示須要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL
origin  https://github.com/yangwang12345/node_test.git (fetch)
origin  https://github.com/yangwang12345/node_test.git (push)
5.2 添加遠程倉庫
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin  https://github.com/schacon/ticgit (fetch)
origin  https://github.com/schacon/ticgit (push)
pb  https://github.com/paulboone/ticgit (fetch)
pb  https://github.com/paulboone/ticgit (push)

果你想拉取 Paul 的倉庫中有但你沒有的信息,能夠運行 git fetch pb,如今 Paul 的 master 分支能夠在本地經過 pb/master 訪問到

$ git fetch pb
5.3 從遠程倉庫中抓取與拉取
$ git fetch [remote-name]

必須注意 git fetch 命令會將數據拉取到你的本地倉庫,你將會擁有那個遠程倉庫中全部分支的引用,能夠隨時合併或查看 - 它並不會自動合併或修改你當前的工做。 當準備好時你必須手動將其合併入你的工做。

5.3 推送到遠程分支

git push [remote-name] [branch-name]

$ git push origin master //將 master 分支推送到 origin 服務器時

注意:當你和其餘人在同一時間克隆,他們先推送到上游而後你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先將他們的工做拉取下來並將其合併進你的工做後才能推送。

5.4 查看遠程倉庫
$ git remote show origin
5.5 遠程倉庫的移除與重命名
$ git remote rename pb paul
$ git remote
origin
paul

$ git remote rm paul
$ git remote
origin

6 打tag

6.1 查看標籤

比較有表明性的是人們會使用這個功能來標記發佈結點(v1.0 等等)

$ git tag
v0.1
v1.3

$ git tag -l 'v2017*'  //只對2017開頭的tag有興趣
v20170105
v20170209
v20170216
v20170217
v20170302
v20170303
v20170713
v20170720
v20170721
v20170822
v20171026
6.2 建立標籤

附註標籤

$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4

$ git show v1.4 //查看標籤信息

上一章 瞭解git 下一章 git分支

相關文章
相關標籤/搜索