這是之前學Git記下的筆記,以前傻乎乎的用指令行,現在發現用小烏龜更友善。
轉載注明出處哦:http://www.cnblogs.com/stonehat/
1 基本概念
Stage:暫存區,緩存區
Repository:倉庫(本地倉庫).git目錄
Remote:遠端倉庫
Track: 将一個新檔案加入到git
Unstage:取消放入暫存區
Git存儲原理:
Git doesn’t store data as a series of changesets or differences, but instead as a series of snapshots。Git 儲存的不是檔案差異或者變化量,而隻是一系列檔案快照。
快照管理:(微型檔案系統,檔案指紋驗證是否變化,不便的直接連結)

三種區域:
所有資料存放在本地.git目錄,可以直接拷貝。
2 基本操作
2.1 倉庫建立
Git init
2.2 倉庫複制
Git clone url
隻會複制master下來
Git clone url dir
指定檔案夾
git clone https://github.com/libgit2/libgit2 mylibgit
2.3 檔案管理
2.3.1 添加檔案到暫存區
Git add *
Git add file
Git add dir
2.3.2 删除檔案到暫存區
Git rm
2.3.3 修改檔案名(移動)到暫存區
Git mv [file-orgin] [file-rename]
2.3.4 送出暫存區到倉庫
Git commit –m “注釋”
2.3.5 撤銷修改檔案
修改的檔案可以在git status觀察到
如果撤銷修改,
可以采用git checkout -- file的方式撤銷
撤銷所有
git checkout -- *
2.3.6 撤銷暫存區資料
2.4 分支管理
檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合并某分支到目前分支:git merge <name>
預設使用fast-forward模式
可以禁用,合并時會生成一個新的commit
git merge --no-ff -m "merge " dev
删除分支:git branch -d <name>
遠端分支下載下傳:git checkout -b <本地分支名> origin/<遠端分支名>
合并沖突:
當merge出現沖突的時候,git會提醒
需要手動修改後進行送出
Git add
Git commit
2.5 版本管理
每個送出都是一個版本,git提供了一些友善的指令供我們使用。
2.5.1 檢視日志
Git log
目前分支的commit曆史
有用的配置
log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Git reflog
顯示引用變化曆史,相當于head變化
2.5.2 版本回退:
一個git reset --hard HEAD^
倆git reset --hard HEAD^^
多個git reset --hard HEAD~數字
回退到指定版本
git reset --hard commit_id
commitid可以從reflog或者log中檢視
--hard表示丢棄暫存區的東西
--soft – 暫存區和工作目錄都不會被改變,改變都放在暫存區
--mixed – 預設選項。緩存區和你指定的送出同步,但工作目錄不受影響,改變不會放在暫存區。
--hard – 緩存區和工作目錄都同步到你指定的送出
Git revert
reset是指将目前head的内容重置,不會留任何痕迹。
revert是撤銷某一次送出,但是這次撤銷也會作為一次送出進行儲存
假設目前有3個commit,git log如下:
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c
執行 git revert HEAD~1之後,會提示送出資訊,送出後git log如下:
commit4: Reverts “test2.c”
commit3: test3.c
commit2: test2.c
commit1: test1.c
執行完後,test2.c被删除了,運作git status,無任何變化。
執行 git reset HEAD~1之後,再次看git log,如下:
執行完後,commit3被删除了;但是test3.c還在本地緩存區,運作git status,可以看見提示test3.c可以用git add包含該檔案。
若執行git reset --soft HEAD~1,log為:
執行完後,test3.c也被删除了,檢視git status,提示可以commit以送出test3.c,test3.c在暫存區。
若執行git reset --hard HEAD~1,log為:
執行完後,test3.c也被删除了,檢視git status,無任何變化。
2.6 标簽管理
2.6.1 打标簽
相當于給某個送出取一個好記住的名字,例如v1.0.0
git tag v1.0.0 [commitid]
2.6.2 顯示所有标簽
git tag
2.6.3 顯示标簽資訊
Git show tagname
2.6.4 标簽管理
指令git push origin <tagname>可以推送一個本地标簽;
指令git push origin --tags可以推送全部未推送過的本地标簽;
指令git tag -d <tagname>可以删除一個本地标簽;
指令git push origin :refs/tags/<tagname>可以删除一個遠端标簽。
2.7 遠端管理
一般都要和兩部分人提供
2.7.1 git clone
從遠端主機克隆一個版本庫
git clone <版本庫的網址> <本地目錄名>
2.7.2 git remote
為了便于管理,Git要求每個遠端主機都必須指定一個主機名。git remote指令就用于管理主機名。
列出所有主機:git remote
帶網址列出主機:git remote –v
clone版本庫的時候,所使用的遠端主機自動被Git命名為origin。如果想用其他的主機名,需要用git clone指令的-o選項指定。
git clone -o jQuery https://github.com/jquery/jquery.git
git remote show指令加上主機名,可以檢視該主機的詳細資訊。
git remote show <主機名>
git remote add指令用于添加遠端主機。
git remote add <主機名> <網址>
git remote rm指令用于删除遠端主機。
git remote rm <主機名>
git remote rename指令用于遠端主機的改名。
git remote rename <原主機名> <新主機名>
2.7.3 git fetch
将某個遠端主機的更新,全部取回本地。
如果隻想取回特定分支的更新,可以指定分支名。
git fetch <遠端主機名> <分支名>
所取回的更新,在本地主機上要用"遠端主機名/分支名"的形式讀取。比如origin主機的master,就要用origin/master讀取。
git branch –r,可以用來檢視遠端分支,
-a選項檢視所有分支。
可以采用git checkout <遠端主機名>/ <分支名>切換到該分支
但是一般用
git checkout -b newBrach <遠端主機名>/ <分支名> ,意思是在<遠端主機名>/ <分支名>的基礎上,建立一個新分支。
也可以使用merge,合并遠端分支。
2.7.4 git pull
取回遠端主機某個分支的更新,再與本地的指定分支合并。
git pull <遠端主機名> <遠端分支名>:<本地分支名>
等同于先做git fetch,再做git merge
2.7.5 git push
指令用于将本地分支的更新,推送到遠端主機。
git push <遠端主機名> <本地分支名>:<遠端分支名>
省略遠端分支名,表示将本地分支推送與之存在"追蹤關系"的遠端分支(通常兩者同名),如果該遠端分支不存在,則會被建立。
省略本地分支名,則表示删除指定的遠端分支
如果目前分支與遠端分支之間存在追蹤關系,則本地分支和遠端分支都可以省略。
如果本地版本低,那麼會報錯,可以--force強制push,--tags表示也推送tags.
git push --force origin
2.7.6 将本地庫推到遠端端
git push origin master
2.8 自定義Git
2.8.1 自定義指令
可以利用git config指令來給指令取别名。
例如
git config --global alias.co csheckout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
其中,global表示針對目前使用者所有倉庫都起作用。如果不加,表示隻對目前倉庫有用,每個倉庫的Git配置檔案都放在.git/config檔案中:
目前使用者的config存放在使用者主目錄下的一個隐藏檔案.gitconfig中:
2.8.2 忽略檔案
為了防止沒用的檔案被提醒untracked,可以在git倉庫主目錄下添加.gitignore檔案(本身要放到版本庫裡面),該檔案可以配置git要忽略哪些檔案,不添加到倉庫中。
如果發現不能添加檔案,可以采用
git check-ignore -v file檢查被哪個規則忽略了。
作弊碼
轉載請注明出處:http://www.cnblogs.com/stonehat/