首先git是一個版本控制工具,相似於SVNhtml
筆記包括兩部分,git本地版本控制和git遠程協助linux
一.Git本地版本控制git
以git windows版本msysgit爲例,下載地址http://msysgit.github.io/github
1.打開git bash這是基於MINGW32的一個模擬linux bash終端windows
、bash
2.將目錄切換到C盤根目錄,建立一個文件夾名爲gitproj服務器
3.在該目錄下執行命令 git init初始化該文件目錄爲git庫 將生產一個.git後綴的文件app
不要改動或者刪除這個文件,這個文件將包括整個git版本庫的全部信息工具
4.好,如今咱們開始進行版本控制,在當前目錄下新建一個vpoetgit.txt測試
裏面添加一行內容"this is first line"
5.使用git status查看下當前git庫的狀態
Untracked files說明還未add和commit
6.咱們首先add 一次
Changes to be committed說明雖然文件以及添加到庫中可是仍然未提交
7.咱們commit一次看看
working directory clean 說明你的工做目錄是乾淨的全部文件和修改都已經添加和提交了
8.關於add和commit理解,要先理解git主分區,暫存區,工做區的概念。工做區是指還未add以前的
文件,暫存區指add以後的文件,而commit是指將暫存區的文件提交到主分區中。
因此通常的步驟是,咱們在git工做目錄下建立的新文件或者拷貝的文件是不被git管理的,須要add到
暫存區後,git纔會跟蹤這些文件的變化,當暫存區修改完成就直接能夠commit主分區了。
其餘一些命令(轉自http://www.cnblogs.com/cspku/articles/Git_cmds.html):
查看、添加、提交、刪除、找回,重置修改文件
git help <command> # 顯示command的help
git show # 顯示某次提交的內容 git show $id
git co -- <file> # 拋棄工做區修改
git co . # 拋棄工做區修改
git add <file> # 將工做文件修改提交到本地暫存區
git add . # 將全部修改過的工做文件提交暫存區
git rm <file> # 從版本庫中刪除文件
git rm <file> --cached # 從版本庫中刪除文件,但不刪除文件
git reset <file> # 從暫存區恢復到工做文件
git reset -- . # 從暫存區恢復到工做文件
git reset --hard # 恢復最近一次提交過的狀態,即放棄上次提交後的全部本次修改
git ci <file> git ci . git ci -a # 將git add, git rm和git ci等操做都合併在一塊兒作 git ci -am "some comments"
git ci --amend # 修改最後一次提交記錄
git revert <$id> # 恢復某次提交的狀態,恢復動做自己也建立次提交對象
git revert HEAD # 恢復最後一次提交的狀態
查看文件diff
git diff <file> # 比較當前文件和暫存區文件差別 git diff
git diff <id1><id2> # 比較兩次提交之間的差別
git diff <branch1>..<branch2> # 在兩個分支之間比較
git diff --staged # 比較暫存區和版本庫差別
git diff --cached # 比較暫存區和版本庫差別
git diff --stat # 僅僅比較統計信息
查看提交記錄
git log git log <file> # 查看該文件每次提交記錄
git log -p <file> # 查看每次詳細修改內容的diff
git log -p -2 # 查看最近兩次詳細修改內容的diff
git log --stat #查看提交統計信息
tig
Mac上可使用tig代替diff和log,brew install tig
Git 本地分支管理
查看、切換、建立和刪除分支
git br -r # 查看遠程分支
git br <new_branch> # 建立新的分支
git br -v # 查看各個分支最後提交信息
git br --merged # 查看已經被合併到當前分支的分支
git br --no-merged # 查看還沒有被合併到當前分支的分支
git co <branch> # 切換到某個分支
git co -b <new_branch> # 建立新的分支,而且切換過去
git co -b <new_branch> <branch> # 基於branch建立新的new_branch
git co $id # 把某次歷史提交記錄checkout出來,但無分支信息,切換到其餘分支會自動刪除
git co $id -b <new_branch> # 把某次歷史提交記錄checkout出來,建立成一個分支
git br -d <branch> # 刪除某個分支
git br -D <branch> # 強制刪除某個分支 (未被合併的分支被刪除的時候須要強制)
分支合併和rebase
git merge <branch> # 將branch分支合併到當前分支
git merge origin/master --no-ff # 不要Fast-Foward合併,這樣能夠生成merge提交
git rebase master <branch> # 將master rebase到branch,至關於: git co <branch> && git rebase master && git co master && git merge <branch>
Git補丁管理(方便在多臺機器上開發同步時用)
git diff > ../sync.patch # 生成補丁
git apply ../sync.patch # 打補丁
git apply --check ../sync.patch #測試補丁可否成功
Git暫存管理
git stash # 暫存
git stash list # 列全部stash
git stash apply # 恢復暫存的內容
git stash drop # 刪除暫存區
Git遠程分支管理
git pull # 抓取遠程倉庫全部分支更新併合併到本地
git pull --no-ff # 抓取遠程倉庫全部分支更新併合併到本地,不要快進合併
git fetch origin # 抓取遠程倉庫更新
git merge origin/master # 將遠程主分支合併到本地當前分支
git co --track origin/branch # 跟蹤某個遠程分支建立相應的本地分支
git co -b <local_branch> origin/<remote_branch> # 基於遠程分支建立本地分支,功能同上
git push # push全部分支
git push origin master # 將本地主分支推到遠程主分支
git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)
git push origin <local_branch> # 建立遠程分支, origin是遠程倉庫名
git push origin <local_branch>:<remote_branch> # 建立遠程分支
git push origin :<remote_branch> #先刪除本地分支(git br -d <branch>),而後再push刪除遠程分支
Git遠程倉庫管理
git remote -v # 查看遠程服務器地址和倉庫名稱
git remote show origin # 查看遠程服務器倉庫狀態
git remote add origin git@ github:robbin/robbin_site.git # 添加遠程倉庫地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址(用於修改遠程倉庫地址) git remote rm <repository> # 刪除遠程倉庫
建立遠程倉庫
git clone --bare robbin_site robbin_site.git # 用帶版本的項目建立純版本倉庫
scp -r my_project.git git@ git.csdn.net:~ # 將純倉庫上傳到服務器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服務器建立純倉庫
git remote add origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址
git push -u origin master # 客戶端首次提交
git push -u origin develop # 首次將本地develop分支提交到遠程develop分支,而且track
git remote set-head origin master # 設置遠程倉庫的HEAD指向master分支
也能夠命令設置跟蹤遠程庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop