git init
git clone https://github.com/yangwang12345/node_test.git git clone -b 分知名 路徑 //切換到其餘遠程分支
Git 支持多種數據傳輸協議
https:// 協議
git:// 協議
SSH 傳輸協議 : user@server:path/to/repo.gitjavascript
每個文件都不外乎這兩種狀態:已跟蹤(tracked)或未跟蹤(untracked)
初始化一個倉庫以後,文件處於未修改(Unmodified),編輯文件以後處於修改(Modifyed),將修改的文件放入暫存區(Staged),而後提交全部暫存區的修改,造成了Git的生命週期html
git status
若是有修改的文件,此時不被跟蹤,將提示咱們用git add使它被跟蹤,git add能夠用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等;運行了 git add 以後又做了修訂的文件,須要從新運行 git add 把最新版本從新暫存起來:java
git add xxx文件名
用git status會看到文件已被跟蹤,並處於暫存狀態node
$ git status -s M README MM Rakefile A lib/git.rb M lib/simplegit.rb ?? LICENSE.txt
?? 新添加的未跟蹤文件
A 新添加到暫存區中的文件
MM Rakefile 在工做區被修改並提交到暫存區後又在工做區中被修改了,因此在暫存區和工做區都有該文件被修改了的記錄。
M 該文件被修改了可是還沒放入暫存區
M 該文件被修改了並放入了暫存區git
新建一個.gitignore文件github
touch .gitignore *.[oa] //忽略全部以 .o 或 .a 結尾的文件 *~ //忽略全部以波浪符(~)結尾的文件
文件 .gitignore 的格式規範以下:正則表達式
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
git diff
查看已暫存的將要添加到下次提交裏的內容,能夠用 git diff --cached 命令shell
git commit git commit -m "信息會一行顯示"
git commit 會進入vim編輯器,i編輯,esc退出編輯模式 :wq保存並退出vim
$ git commit -a -m 'added xxx'
給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交服務器
移除某個文件,就必需要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),而後提交.
能夠用 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 \*~
重命名file_from 爲file_to
$ git mv file_from file_to
$ mv README.md README //等價於 $ git rm README.md $ git add README
git log git log -p -2
-p,用來顯示每次提交的內容差別。 你也能夠加上 -2 來僅顯示最近兩次提交
$ 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 .
$ 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)
$ 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
$ git fetch [remote-name]
必須注意 git fetch 命令會將數據拉取到你的本地倉庫,你將會擁有那個遠程倉庫中全部分支的引用,能夠隨時合併或查看 - 它並不會自動合併或修改你當前的工做。 當準備好時你必須手動將其合併入你的工做。
git push [remote-name] [branch-name]
$ git push origin master //將 master 分支推送到 origin 服務器時
注意:當你和其餘人在同一時間克隆,他們先推送到上游而後你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先將他們的工做拉取下來並將其合併進你的工做後才能推送。
$ git remote show origin
$ git remote rename pb paul $ git remote origin paul $ git remote rm paul $ git remote origin
比較有表明性的是人們會使用這個功能來標記發佈結點(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
附註標籤
$ git tag -a v1.4 -m 'my version 1.4' $ git tag v0.1 v1.3 v1.4 $ git show v1.4 //查看標籤信息