git 資料整理

Git資料整理

在這裏,我整理的並非不少,你們能夠稍微借鑑一下就好,git命令用得好能夠偷點懶罷了。

操做流程

一圖勝千言,你經常使用的幾個命令大概就是這樣的。這是阮一峯給出的樣子:
git 基本概念關係圖html

官方git-scm是這樣的:
git districts
只代表了通常的git本地操做流程:node

  1. 在工做目錄中修改文件
  2. 暫存文件,將文件的快照放入暫存區域
  3. 提交更新,找到暫存區域的文件,將快照永久性存儲到git倉庫目錄

命令清單

配置

.gitconfig配置文件,能夠是電腦上的全局配置,或者項目目錄下的項目配置
git config --list用於查看全局配置
我電腦上是log出:jquery

credential.helper=osxkeychain
user.email=nanci_guo@xinyan.com
user.name=guonanci
push.default=matching
alias.s=status
alias.t=tag
alias.ck=checkout
alias.cm=commit
alias.ps=push
alias.pl=pull
alias.d=diff
alias.l=log
alias.rs=reset
alias.rv=revert
alias.m=merge
alias.unstage=reset HEAD --
alias.last=log -1 HEAD
url.https://.insteadof=git://
last.unstage=log -1 HEAD
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=git@gitlab.xinyan.com:spider/SDK_H5.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

大家在windows也試試,大體應該差很少git

增長刪除文件

# 添加指定文件/目錄到暫存區
$ git add [file1] [dir1] [file2] ...

代碼提交

git commit -m [msg]是提交暫存區到倉庫區,git commit [file1] [dir1] [file2] ... -m [msg]是提交暫存區的指定文件到倉庫區,git commit -a是提交工做區自上次commit以後的變化,直接到倉庫區,git commit --amend -m [msg]是使用一次新的commit,替代上一次提交,若是代碼沒有任何變化,則用來改寫上一次commit的提交信息,`git commit --amend [file1] [file2]是重作一次commit,幷包括指定文件的新變化,其實若是不太注重commit message的話,--amend這個標誌位幾乎沒什麼用了。github

分支

// 列出全部本地分支
git branch
// 列出全部遠程分支
git branch -r
// 列出全部本地和遠程分支
git branch -a
// 新建一個分支,但依然停留在當前分支
git branch [new-branch-name]
// 從指定分支新建一個分支,切換到新分支,與同名遠程分支創建追蹤關係
git checkout -b [new-branch-name] [base-branch-name:可選] && git push -u origin [new-branch-name]
// 合併指定分支到當前分支
git merge [branch-to-merge]
// 刪除本地和遠程的同名分支, 
git branch -d [branch-name] && git push origin :[branch-name]

查看信息

// 顯示有變動的文件
git status
// 顯示暫存區和工做區的差別
git diff
// 顯示工做區和當前分支最新commit之間的差別
git diff HEAD
// 顯示指定文件的每一行代碼是誰在哪一個時間改過,信息有點多哦。。
git blame [file]

遠程同步

// 下載遠程倉庫的全部變更
git fetch [remote]
// 顯示全部遠程倉庫
git remote -v
// 顯示某個遠程倉庫的信息
git remote show [remote]
// 增長一個新的遠程倉庫,並命名
git remote add [shortname] [url]
// 取回遠程倉庫的變化,並與本地分支合併
git pull [remote] [branch]
// 上傳本地指定分支到遠程倉庫
git push [remote] --force
// 推送全部遠程分支到遠程倉庫
git push [remote] --all

撤銷

// 恢復暫存區的指定文件到工做區,我常常用
git checkout [file1] [dir1] ... 
// or 
git checkout .
// 重置暫存區的指定文件,與上一次的commit保持一致,但工做區不變
git reset [file]
// 重置當前分支的HEAD爲指定commit,同時重置暫存區與工做區,與指定commit保持一致
git reset --hard [comit-log]

// 新建一個commit,用來撤銷指定commit,後者的全部變化都被前者抵消,而且應用到當前分支
git revert [commit]

git 遠程操做

git clone,git remote

// ssh,https,git,本地協議都支持,git協議下載最快
git clone [版本庫url] [本地目錄名:可選]

// git remote 用於管理主機名,不帶選項的時候,git remote列出全部遠程主機

git remote // origin 
// -v 選項能夠查看主機網址
git remote -v
origin git@gitlab.xinyan.com:spider/SDK_H5.git (fetch)
origin git@gitlab.xinyan.com:spider/SDK_H5.git (push) 

// 克隆版本庫的時候,所使用的遠程主機自動被git命名爲origin,若是想用其餘的主機名,須要用git clone命令的-o選項指定
git remote -o jQuery htttps://github.com/jquery/jquery.git
git remote
jQuery

// 能夠查看該主機的詳細信息
git remote show <host-name> 
// 添加
git remote add <host-name> <url>

// 刪除
git remote rm <host-name>
// 更名
git remote rename <old-name> <new-name>

git fetch

一旦遠程主機的版本庫有了commit更新, 須要將這些更新取回本地,用到git fetch <remote-host>
git fetch命令一般用來查看其餘人的進程,由於她取回的代碼對你本地的開發代碼沒有影響。默認狀況下,git fetch取回全部分支的更新。若是隻想取回特定分支的更新,能夠指定分支名:git fetch <remote-host> <branch-name>。所取回的更新,須要在本地主機上用"遠程主機名/分支名"的形式讀取。數據庫

git pull

取回遠程主機某個分支的更新,再與本地的指定分支合併git pull <remote-host> <remote-branch>:<local-branch>。若是遠程分支與當前分支合併,則冒號後面的部分能夠省略:vim

git pull origin next

git fetch origin
git merge origin/next

在某些場合,git會自動在本地分支和遠程分支之間,創建追蹤關係tracking,好比在git clone的時候,全部本地分支默認與遠程主機的同名分支創建追蹤關係
也容許手動創建追蹤關係:git branch --set-upstream master origin/next
若是當前分支遠程分支存在追蹤關係,git pull就能夠省略遠程分支名:git pull origin,若是當前分支只有一個追蹤分支,連遠程主機名均可以省略:git pull,上面命令表示,當前分支自動與惟一一個追蹤分支進行合併。windows

若是遠程主機刪除了某個分支,默認狀況下git pull的時候不會在拉取遠程分支的時候刪除對應的本地分支,是爲了防止因爲其餘人操做了遠程主機致使git pull不知不覺刪除了本地分支,固然能夠加上選項 -p就會在本地刪除遠程已經刪除的分支:bash

git pull -p 
// or 
git fetch --prune origin
git fetch -p

git push

用於將本地分支的更新推送到遠程主機,格式與git pull命令相仿:服務器

git push <remote-host> <local-branch>:<remote-branch>

分支推送的順序是<from>:<to>git pull對應<remote-branch>:<local-branch>git push對應<local-branch>:<remote-branch>,若是省略遠程分支名,則表示將本地分支推送與之存在「追蹤關係」的遠程分支(一般二者同名),若是該遠程分支不存在,則會被新建。git push origin master,上面命令表示將本地的master分支推送到origin主機的master分支。
若是省略本地分支名,則表示刪除指定的遠程分支,等同於推送一個空的本地分支到遠程分支。

git push origin :master
// or 
git push origin --delete master

若是當前分之與遠程分支之間存在追蹤關係,則本地分支和遠程分支均可以省略:git push origin
若是當前分支只有一個追蹤分支,那麼主機名均可以省略:git push

若是當前分支與多個主機之間存在追蹤關係,則可使用-u選項指定一個默認主機,這樣後面就能夠不加任何參數使用git push了: git push -u origin master。不帶任何參數的git push默認只推送當前分支,叫作simple方式,此外還有一種matching方式
,如今默認使用simple方式,若是要修改,採用git config --global push.default matching/simple,還有就是不論是否存在對應的遠程分支,都會推送到遠程主機,須要使用 --all選項:git push --all origin,若是要推送標籤,要加上--tags選項:git push origin --tags

git 進階

git 特色

近乎全部操做都只是本地執行

好比說要瀏覽項目的歷史,git不須要外聯到服務器去獲取歷史,只須要直接從本地數據庫中讀取。

git保證完整性

git中全部數據在存儲前都計算校驗和,而後以校驗和來引用。意味着不可能在git不知情時更改文件內容或者目錄內容。這個功能構建在git底層。是構成git哲學不可或缺的部分,若是在傳輸過程當中丟失信息或者損壞文件,git就能發現。
git用以計算校驗和的機制叫作SHA-1散列(哈希hash),他是一個由40個十六進制字符(0-9和a-f)組成字符串,基於git中文件的內容或者目錄結構計算出來。

進階部分很差整理,有點多,難度比較大,你們能夠本身稍微看看我推薦的progit.zh.pdf 還有 git-scm中文文檔,不過說到底git只是個工具,遇到問題能夠及時解決就行。

提高效率的工具方面

其實本身手打也差很少, 能夠利用以前說起的git config --list裏面的alias,好比:
git pl && git add . && git cm -m "commit message" && git ps; && 符號是說上一條命令執行成功纔會執行下一條
Mac上有oh-my-zsh這個很方便的命令行alias全局配置工具,還有iterm2終端app,
參考下面的文章:
item2安裝及使用
oh-my-zsh安裝
oh-my-zsh配置

我在項目裏面配置了ci.sh 和 test.sh prd.sh 能夠用於平常的提交代碼,推送到test分支發佈測試環境,推送到prd分支發佈生產環境。windows的話推薦強大的Cygwin這裏也有一篇有關Cygwin的短文,

windows上我找到這篇文章,特別短,主要是alias方面。

不過我以爲若是你的IDE自帶終端還有git操做比較方便的話仍是用IDE吧,不用命令行也能夠。
若是用命令行的話,推薦git-bash這裏有篇短文,推薦一下。

參考資料

書籍 文檔 連接
progit.zh.pdf git-scm.com/book 阮一峯-經常使用git命令清單
相關文章
相關標籤/搜索