在這裏,我整理的並非不少,你們能夠稍微借鑑一下就好,git命令用得好能夠偷點懶罷了。
一圖勝千言,你經常使用的幾個命令大概就是這樣的。這是阮一峯給出的樣子:
html
官方git-scm是這樣的:
只代表了通常的git本地操做流程:node
.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]
// 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>
一旦遠程主機的版本庫有了commit更新, 須要將這些更新取回本地,用到git fetch <remote-host>
git fetch命令一般用來查看其餘人的進程,由於她取回的代碼對你本地的開發代碼沒有影響。默認狀況下,git fetch取回全部分支的更新。若是隻想取回特定分支的更新,能夠指定分支名:git fetch <remote-host> <branch-name>
。所取回的更新,須要在本地主機上用"遠程主機名/分支名"的形式讀取。數據庫
取回遠程主機某個分支的更新,再與本地的指定分支合併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 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用以計算校驗和的機制叫作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命令清單 |