$ mkdir learngit
$ cd learngit
$ pwd
初始化一個Git倉庫
git init ,把這個目錄變成Git能夠管理的倉庫(目錄下多了一個.git的目錄 ls -a)
添加文件到Git倉庫:
git add 把文件添加到倉庫
git commit -m " xxx" 文件提交到倉庫
git status 工做區的狀態,讓咱們時刻掌握倉庫當前的狀態
git diff 查看修改內容
版本回退
git log (--pretty=online)查看提交歷史,顯示從最近到最遠的提交日誌,以便肯定要回退到哪一個版本。
用HEAD表示當前版本,也就是最新的提交3628164...882e1e0,上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然
往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100
git reset --hard HEAD^ 回退到上一個版本
git reset --hard (3628164) 指定回到某個版本(版本號不必寫全,前幾位就能夠了,Git會自動去找。
固然也不能只寫前一兩位)
git reflog 查看命令歷史,以便肯定要回到將來的哪一個版本。
工做區和暫存區
工做區(Working Directory)
暫存區(stage或index)
版本庫(Repository)工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫
前面講了咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。
git
git diff HEAD -- readme.txt 查看工做區和版本庫裏面最新版本的區別
撤銷修改
git checkout -- readme.txt 當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時
當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改
第一步:git reset HEAD readme.txt 把暫存區的修改回退到工做區
第二部:git checkout -- readme.txt
提交分支錯誤,複製分支:github
刪除文件
1、rm只刪除工做區信息; 使用 git checkout -- file便可恢復;
2、git rm 刪除工做區和stage信息;
一、使用git reset HEAD -- file便可恢復;app
二、恢復步驟:ssh
1)先使用git reset HeAD -- file從master中把已刪除信息copy到到stage區;ide
2)再使用git checkout -- file從stage區把已刪除信息copy到工做區。over!!!fetch
3)這時你就看到刪除的文件又回來啦。啦啦加密
3、git commit -m 「file」刪除工做區,stage和master信息;url
一、使用git reset --hard HEAD^便可恢復。spa
二、恢復步驟: 1)先使用git reset --hard HEAD^從master回收處恢復到master中; 2)再使用git reset HeAD -- file從
master中把已刪除信息copy到到stage區;日誌
3)最後,使用git checkout -- file從stage區把已刪除信息copy到工做區
4)這時你就看到刪除的文件又回來啦。啦啦啦!
遠程倉庫
1.註冊一個GitHub帳號,就能夠免費得到Git遠程倉庫。
2.本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的
1)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa
和 id_rsa.pub
這兩個文件,若是沒有,建立ssh key:
$ ssh-keygen -t rsa -C "youremail@example.com"
2)登錄GitHub,打開「Account settings」,「SSH Keys」頁面:點「Add SSH Key」,填上任意 Title,在Key文本框裏粘貼id_rsa.pub
文件的內容:
添加遠程庫:
點擊按鈕create a new repository 建立一個新的倉庫
關聯一個遠程庫,
把本地倉庫的內容推送到GitHub倉庫
$ git remote add origin git@github.com:michaelliao/learngit.git
把本地庫的全部內容推送到遠程庫上
$ git push -u origin master
因爲遠程庫是空的,咱們第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支 內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在之後的 推送或者拉取時就能夠簡化命令。
從遠程庫克隆:
git clone git@github.com:jialechun/learngit1.git
分支管理
查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
git merge --no-ff -m "merged bug fix 101" issue-101
刪除分支:git branch -d <name>
看到分支合併圖
: git log --graph
git stash 切換分支前把修改的內容存在某個地方
git stash list 查看存儲的內容
git stash apply
切回分支恢復修改的內容,stash內容不刪
除
git stash apply stash@{0} 屢次stash,切回分支指定恢復修改的內容,stash內容不刪除
git stash pop 恢復同時stash的內容也刪除
git branch -D <name>
強行刪除。要丟棄一個沒有被合併過的分支
查看遠程庫信息,使用git remote -v
;
本地新建的分支若是不推送到遠程,對其餘人就是不可見的;
從本地推送分支,使用git push origin branch-name
,若是推送失敗,先用git pull
抓取遠程的新提交;
在本地建立和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name
,本地和遠程分支的名稱最好一致;
創建本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name
;
從遠程抓取分支,使用git pull
,若是有衝突,要先處理衝突。
建立標籤
命令git tag v1.0
用於新建一個標籤,默認爲HEAD
,也能夠指定一個commit id;
git tag v0.9 6224937 找到歷史提交的commit id新建一個標籤
git tag -a v0.1 -m "說明文字"
能夠指定標籤信息;
git tag -s <tagname> -m "blablabla..."
能夠用PGP簽名標籤;
命令git tag
能夠查看全部標籤。
git tag -r 查看遠程標籤
命令git show v0.9
能夠看到說明文字
$ git pull origin --tags 合併遠程倉庫的tag到本地:
命令git push origin <tagname>
能夠推送一個本地標籤;
命令git push origin --tags
能夠推送所有未推送過的本地標籤;
標籤已經推送到遠程,先從本地刪除,從遠程刪除:
命令git tag -d <tagname>
能夠刪除一個本地標籤;
命令git push origin :refs/tags/<tagname>
能夠刪除一個遠程標籤。
配置別名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
每一個倉庫的Git配置文件都放在.git/config
文件中
[core]
repositoryformatversion = 0
filemode = true bare = false
logallrefupdates = true ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master [alias] last = log -1
co = checkout
ci = commit br = branch
st = status
[user]
name = Your Name
email = your@email.com
git rebase hea~1
git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge
git pull:至關因而從遠程獲取最新版本並merge到本地,至關於git fetch 和 git merge