前言:Git是什麼
Git是一個開源代碼庫和分佈式版本控制系統。git
它不須要服務器端軟件,就能夠運做版本控制。能夠經過命令行或GUI工具進行操做。github
參加實習工做後才發現公司是使用Git進行項目管理的,這與在校內使用的SVN仍是有比較大差異。並且本身在校內過於依賴GUI界面進行項目管理,參加工做後才發現命令行的強大。本文是我的在Windows平臺下學習如何使用Git(命令行)後整理的,不是標準的Git教程。歡迎Git初學者瀏覽學習交流。文中可能有錯誤,懇請各位路過的大牛指正。web
[注:本文斜體字爲示例名稱]緩存
常規初始化操做
創建名爲 folderName 的文件夾服務器
$mkdir folderName
初始化git倉庫,實際上是增長了.git隱藏目錄,把本地目錄變成Git能夠管理的倉庫分佈式
$git init
複製遠程目錄 abcide
$https://github.com/abc
查看狀態工具
$git status
三種狀態
git管理目錄下的文件存在三種狀態學習
- Change(Unstaged):你改動了一個,沒有調用任何git命令前,就是這種狀態。
- Staged暫存區:調用git add或者git commit -a以後,進入Staged狀態,表示申明要變更了。
- Committed:生成新的版本commit號,將改動提交到HEAD,可是還沒同步到遠程倉庫。
在 Git 中,HEAD是一個指向你正在工做中的本地分支的指針(將 HEAD 想象爲當前分支的別名。)url
分支
建立倉庫的時候,會有一個叫「master」 的默認分支。
你能夠建立並命名本身的分支,這樣在本身的分支上改動就不會影響到master和其它分支。
在本身的分支上的修改確認無誤後,能夠隨時合併到master或其它分支。
經過讓不一樣的開發者擁有不一樣分支,使得開發能夠創建在一樣的已有代碼上卻互不影響。
不帶任何參數,查看當前目錄有多少本地分支,以及當前HEAD指向哪一個分支
$git branch
此命令新建一個tmpBranch本地分支(僅僅是創建了一個新的分支,但不會自動切換到這個分支中去)
$git branch tmpBranch
切換到本地tmpBranch分支
$git checkout tmpBranch
新建並切換到本地tmpBranch分支
$git checkout -b tmpBranch
合併分支(將tmpBranch分支與當前所在分支合併)
$git merge tmpBranch
刪除tmpBranch本地分支,若是該本地分支不曾合併,這會提示出錯
$git branch -d tmpBranch
強制刪除tmpBranch本地分支
$git branch -D tmpBranch
將oldBranch本地分支重命名爲newBranch
$git branch -m oldBranch newBranch
add(添加)操做
執行add命令,可令文件從Change(Unstaged)狀態變爲Staged狀態(將改動添加到緩存區)
把octocat.txt文件從change->staged狀態
$git add octocat.txt
添加當前(aaa)目錄下全部的更新到緩存區
$git add /home/root/aaa/*
取消已add到暫存區的文件gitTest.txt(與add執行相反的操做)
$git reset HEAD gitTest.txt
若編輯修改已暫存(已add到暫存區)的文件,後運行git status會出現暫存先後的兩個版本(Change和Staged)。
若此時Commit,則只會同步已暫存(Staged)的那個版本,而不會同步暫存後修改的部分。
若要同步暫存後修改的部分,應從新add該文件。
add添加到暫存區的文件,git纔會監控它的變化。在Unstaged狀態的文件變化並不會在命令行中體現出來。
查看差別
查看文件被修改以後尚未暫存起來的變化內容,顯示的是與上次暫存文件的差別
$git diff
顯示當前目錄和另外一個叫test分支的差異
$git diff test
查看已經暫存起來的文件和上次提交時的快照之間的差別
$git diff --cached
Commit(提交)操做
Commit操做可將改動提交到本地HEAD.
提交到倉庫,包括一個message說明
$git commit -m "Add cute octocat story"
加上-a參數,把全部已經跟蹤過的文件一次性暫存起來一塊兒提交,這樣不用先git add再git commit,跳過git add步驟
$git commit -a -m 'message'
如下命令將使用當前的暫存區域快照提交。若是剛纔提交完沒有做任何改動,直接運行此命令的話,至關於從新編輯提交說明
$git commit --amend
如下三條命令最終只是產生一個提交,第二個提交命令修正了第一個的提交內容,補上文件forgotten_file
若是提交時忘了暫存某些修改,能夠先補上暫存操做,而後再運行 --amend 提交
$git commit -m 'initial commit'
$git add forgotten_file
$git commit --amend
Push(推送)與Pull(更新)操做
Push命令會把Commit過的改動提交到遠端倉庫。
把本地master分支推送到遠程origin倉庫上
$git push origin master
把本地分支b1推送到遠程origin倉庫上,並命名爲b2
$git push origin b1:b2
從其餘的版本庫(既能夠是遠程的也能夠是本地的)將代碼更新到本地(相似於SVN的Update)
$git pull
移除文件
若在工做目錄中手工刪除了某個已跟蹤(位於暫存區)的文件,則須要運行移除命令記錄這次移除文件的操做。
最後提交的時候,該文件便再也不歸入版本管理。
記錄刪除gitest.txt文件的操做
$git rm gitest.txt
若想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),且僅是從跟蹤清單中刪除,
但仍然但願文件自己保留在當前工做目錄中,加--cached參數選項便可
$git rm --cached readme.txt
標籤操做
Git 使用的標籤有兩種類型:輕量級的(lightweight)和含附註的(annotated)。
新建一個含附註(-a)的標籤
$git tag -a v1.4 -m 'my version 1.4'
新建一個輕量級標籤
$git tag v1.5
查看相應標籤的版本信息
$git show v1.1
其它經常使用操做
重命名操做,將文件名爲file_from的文件重命名爲file_to
$git mv file_from file_to
查看日誌(使用-p選項能夠展開顯示每次提交的內容差別,用-2則僅顯示最近的兩次更新)
$git log
重置,撤銷某次提交(HEAD指向的版本就是當前版本)
$git reset octofamily/octodog.txt
還原修改,把filename文件在工做區的修改所有撤銷,
若該文件在修改後尚未被添加到暫存區,則改回與版本庫同樣的狀態,
反之,則改回添加到暫存區後的狀態
$git checkout -- octocat.txt
爲命令配置別名,此例爲查看最後一次提交信息,這樣,直接輸入git last就等同於輸入git log -1 HEAD
$git config --global alias.last 'log -1 HEAD'