git的幾十個基本面

 

一、下載git?
git-scm.com

二、獲取幫助
git help
git help config

三、什麼是Git?
版本控制系統,Version Control System, VCS。它容許咱們提交變化到源代碼管理庫,而且跟蹤變化。容許develope在同一套代碼庫上協同工做。是現代的、分佈式版本控制系統。

四、一些關鍵詞?
Branch
Merge
Commit:發生在本地
Push
Pull

五、git的歷史
建立於2005年,一開始Linux kernel使用BitKeeper做爲版本控制系統,後來Linus kernel和BitKeeper拆分,BitKeeper的擁有公司沒法再提供免費服務,Linux須要一個新的版本控制系統替代BitKeeper,Linux的程序員們開始重造輪子,並在之後完善了社區,並誕生了GitHub.

六、CVS和DVC?
CVS是Centralized Version Control,程序員們向同一臺中央服務器提交;DVC是Distributed Version Control,每一個人都有本身的代碼控制庫,每次提交是提交到本地的,每次提交了一個新版本的代碼,而後是push到遠程。多人協做的一個場景:A和B協同工做,A把代碼commit到本地,B直接從A的本地代碼庫pull,當A完成階段工做,push到遠程代碼服務器,B如今能夠從遠程代碼庫pull代碼了。

七、一些命令?
init,建立本地代碼庫
status,本地代碼庫的狀態,顯示沒有commit的變化
add,把文件放到本地代碼庫
commit,把變化提交到本地代碼庫
log,顯示提交的全部變化
push,push全部的變化到遠程代碼服務器,還能夠提交到多個地方
pull,從遠程代碼服務器或其它代碼庫pull變化
merge,合併變化

八、git配置

git config --global user.name "darren"
git config --global user.email "764190362@qq.com"
git config --global --list

信息被存放在了管理員文件夾中的.gitconfig文件中,大體是:
[user]
    name = darren
    email = 764190362@qq.com

git config --global core.editor note 使用哪一個編輯器
git config --global help.autocorrect 1 當出現錯誤命令會有提示
git config --global color.ui auto 設置字體顏色等
git config --glboal core.autocrlf false windows下推薦使用

以上的設置是System級別的。

還能夠設置用戶級別的,用戶級別能夠覆蓋System級別。

git config user.name "jack"

用戶級別移除設置:git config --unset core.autocrlf

九、建立本地代碼庫, 追加文件, 提交變化

→ 來到某個文件夾,打開命令行窗口
→ 建立本地代碼庫
git init
→ 在文件夾內建立一個README.txt文件
→ 查看本地代碼庫的狀態
git status
紅色字體表示沒有被tracked的文件
→ 把文件添加到本地代碼庫,使文件能夠被track
git add README.txt
git add -u 用來add剛被更新的文件,而不是剛添加的文件
git add -A add全部文件到staging area被track等待被commit
此時,再運行git status,README.txt變成綠色,說明已經被track
→ commit變化
git commit
→ 查看歷史
git log

十、歷史版本和版本差別

→ 查看歷史版本
git log
→ 查看版本差別
git diff dd6819..a15ec6
→ 查看最近的歷史版本
git diff HEAD
→ 查看最近的歷史版本以前的版本
git diff HEAD~1
→ 查看最近歷史版本和以前一個版本的差別
git diff HEAD~1..HEAD
也能夠寫成
git diff HEAD~1..

十一、一次修改屢次提交

→ 假設修改了2個文件
README.txt
file.txt
→ 查看狀態
git status
此時能夠看到修改的文件呈紅色狀態。一般一次commit就好,但這裏就分兩次commit
→ 第一次add
git add file.txt
→ 第一次commit
git commit -m "blablabla"
→ 第二次add
git add README.txt
→ 第二次commit
git commit -m "second blablabla"

十二、刪除文件
→ 刪除file.txt文件
→ 查看狀態
git status
deleted file.txt 而且是紅色字體
→ 把刪除也放到staging area
git add -u
→ 查看狀態
git status
deleted: file.txt 而且是綠色字體
→ commit
git commit -m "blablabla"

也就是說,對於刪除的文件,也須要使用git add -u,把刪除的文件放在staging area。

1三、重命名文件
→ 把file.txt重命名爲newfilename.txt
→ 查看狀態
git status
deleted: file.txt 紅色字體(被重命名的文件在git看來是deleted狀態)
nefilename.txt 紅色字體(新的文件在git看來是一個untracked狀態)
→ 把deleted狀態的文件和新文件放到staging area上去
git add -A
→ 查看狀態
git status
renamed: file.txt → newfilename.txt 綠色字體(git 記錄下了重命名過程)
→ commit一下
git commit -m "blablabla"

1四、撤銷改變
→ 修改某個文件,好比README.txt
→ 查看狀態
git status
modified: README.txt 紅色字體
→ 撤銷修改
git checkout README.txt

1五、撤銷多個改變
→ 修改某個文件,好比README.txt
→ 刪除某個文件,好比newfilename.txt
→ 查看狀態
git status
modified: README.txt 紅色字體
deletedL newfilename.txt 紅色字體
→ 撤銷這2個改變
git reset -hard
→ 查看狀態
git status
回到最近的一次HEAD

1六、刪除文件
→ 建立文件
temp1.txt
temp2.txt
→ 查看狀態
git status
temp1.txt 紅色字體
temp2.txt 紅色字體
→ 刪除文件
git clean -f

1七、忽略文件
→ 假設建立logs文件夾和線面的log.txt
→ 查看狀態
git status
logs/ 紅色字體
→ 建立.gitignore文件,內容以下:
/logs/*.txt
/logs/*.log
→ 查看狀態
git status
.gitignore 紅色字體
→ 把.gitignore文件放到staging area
git add .gitignore
→ 提交
git commit -m "Added .gitignore"

1八、拷貝遠程網站到本地
→ 拷貝
git clone https://github.com/jquery/jquery.git
→ 查看全部的提交
git log
git log --oneline

1九、查看數據
→ 查看總共多少次提交
git log --oneline | wc -1
→ 查看帶圖標
git log --oneline --graph
→ 查看哪些人提交了哪些
git shortlog
→ 查看哪些人以及郵件
git shortlog -sne
→ 查看更多
好比在github網站上,有一個Graphs菜單,裏面有更詳盡的信息。

20、查看提交
→ 展現最後一次提交
git show HEAD
→ 展現倒數第二次提交
git show HEAD~1
→ 展現全部提交
git log --oneline
→ 展現最後10次變化
git show HEAD~10
→ 展現某一次提交
git show 5642626
→ 查看遠程
git remote
origin 遠程名稱爲origin的代碼庫
→ 查看遠程更多
git remote -v
origin https://github.com/jquery/jquery.git(fetch)
orgin https://github.com/jquery/jquery.git(push)

2一、Git Protocol

● git支持http、https、git、ssh和file協議
● http的默認端口是80,https的默認端口是443,能夠設置
● 對於好比說github上的網站,一般讀取是自由的,但寫一般須要密碼
● git protocol
git 9418 git://github.com/jquery/jquery.git
● ssh protocol
ssh 22 git@github.com:jquery/jquery.git
● file protocol
file n/a /Users/James/code/jquery

2二、查看分支和標籤
→ 查看本地分支
git branch
→ 查看遠程分支
git branc -r
→ 查看tag
git tag
能夠看到全部版本

2三、本地代碼庫複製到遠程,在遠程建立代碼庫
→ 在本地代碼庫基礎上建立遠程代碼庫
git remote add origin https://github.com/Darrenji/example.git

2四、從遠程fetch
→ fetch
git fetch
把遠程全部變化拉到本地
→ fetch某個分支
git fetch origin

2五、遠程變化同步合併到本地
→ 遠程有一個變化,有多是另一個程序員提交
→ 同步合併到本地
git merge origin/master

2六、從遠程拉
→ 查看遠程分支
git branch -r
origin/master 紅色字體
→ 如今準備拉pull,pull等同於:git fetch; git merge origin/master
→ 創建遠程和本地的映射
git branch --set-upstream master origin/master 第一個master是指本地
→ 開始拉
git pull

2七、推到遠程
→ 本地提交一些變化
git commit -am "blabla"
→ 推
git push
輸入用戶名
輸入密碼

固然還能夠在推以前刪除遠程
→ 刪除遠程
git remote rm origin
→ 列出遠程
git remote -v
→ 從新建立一個SSH協議的遠程
git remote add origin git@github.com:Darren/Example.git
→ 推
git push

注意:SSH協議這裏使用SSH key進行認證用戶

2八、建立標籤
→ 建立標籤
git tag v1.0
git tag -a v1.0_with_message
git tag -s v1.0_signed
→ 列出全部標籤
git tag
→ 列出某個標籤
git tag -v v1.0_signed

2九、把標籤推到遠程
→ 默認狀況下git不推標籤
git push --tags

30、可視化分支
→查看現有分支下的提交
git log --graph --oneline
→ 查看全部分支下的提交
git log --graph --oneline --all --decorate
--all全部分支
--docorate好比HEAD,tag等

還能夠把以上的選項放到全局去並使用別名調用:
→ 全局設置
git config --global alias.lga "log --graph --oneline --all --decorate"
→ 使用新的命令
git lga

3一、建立本地分支
→ 建立本地一個分支
git branch feature1
→ 跳轉到feature1這個分支
git checkout feature1
→ 查看全部分支下的提交
git log --graph --oneline --all --decorate

3二、分支和標籤的區別
branch會跟着commits,tag始終跟着一個commit。

→ 建立一個分支並讓它跟着一個commit
git branch fix1 974b56a
→ 切換到fix1
git checkout fix1
→ 修改fix1下的某個文件
→ 提交
git commit -am "blabla"

3三、重命名和刪除分支
→ 重命名分支
git branch -m fix1 bug1234
→ 刪除分支
git branch -d bug1234
→ 想git報告刪除分支的事
git branch -D bug1234
→ 建立並切換到新建立的分支
git checkout -b feature2

3四、把刪除的分支找回來
→ 輸入以下
git reflog

5a78c8b HEAD@{3}: commit: Fixed bug#1234
→ 找回分支
git branch bug1234 5a78c8b
→ 切換到找回的分支
git checkout bug1234
→ 展現HEAD
git show HEAD

注意:commit保存期只有30天

3五、不提交變化隱藏變化
→ 修改某個文件,好比README.txt
→ 查看狀態
git status
modified: README.txt 紅色字體
→ 隱藏變化
git stash
→ 查看隱藏的全部變化
git stash list

3六、建立遠程分支
→ 推到遠程的某個分支上
git push origin master
→ 把本地branch推到遠程
git push origin v1.0_fixes
遠程會多了一個分支
→ 查看遠程分支
git branch -r

3七、刪除遠程分支
→ 先推到遠程分支
git push origin v1.0_fixes
git push origin v1.0_fixes:v1.0_fixes_remote_branch_name(遠程和本地分支名稱不同)
→ 刪除遠程分支
git push origin:v1.0_fixes_remote_branch_name

3八、git網站設置
一般在git網站,好比github, coding.net都會有一些基本設置的地方。

========最近又做了一些git的練習,整理在下面====================================================

jquery

一、Repository包含什麼

文件、歷史記錄、配置文件

二、git repository的3個狀態

● working directory:一般有一個隱藏的.git文件
● staging area:也叫git index
● commit

三、master branch

8d976fa→626968e→65a7416→a877955→1bf9179
默認的brach叫master

四、Windows安裝git

git-for-windows.github.io
安裝完後打開git bash,輸入:git version

五、簡單使用

→ 在github上建立一個new repository
→ 建立目錄
mkdir projects
→ 導航到目錄
cd projects/
→ 全局配置
git config --global user.name ""
git config --global user.email ""
git config --global --list
→ 複製遠程git repository的地址
→ 複製到本地
git clone https://github.com/demo/demo.git
→ 查看本地repository的狀態
git status
通常是On branch master,默認顯示名稱爲master的這個branch
→ 建立文件
echo "some words" >> start.text
→ 查看文件列表
ls
→ 顯示文件
cat start.txt
→ 查看狀態
git status
start.txt爲紅色字體,表示untracked file,也就是說在working directory,尚未在staging area
→ 放到staging area中去
git add start.txt
→ 查看狀態
git status
start.txt爲綠色字體,表示已經在staging area中了
→ 提交
git commit -m "adding start txt file"
→ 提交到遠程
git push origin master
遠程的名稱是origin,在從遠處拷貝過來的時候默認就是這個名稱
master是默認的遠程分支

六、從本地的一個空目錄開始

→ 建立一個目錄
→ 初始化並建立一個git目錄
git init fresh-project
→ 來到剛建立的fresh-project,查看全部文件,包括隱藏文件
ls -al
發現有一個.git目錄
→ 來到.git目錄,查看
branches/
→ 來到fresh-project目錄,查看狀態
git status
On branch master告訴咱們目前在master這個branch上,咱們是能夠建立其它branch的
→ 建立一個新文件hipster.txt
→ 查看狀態
git status
hipster.txt爲紅色字體,表示這個是untracked file
→ 放到staging area中去
git add hipster.txt
→ 查看狀態
git status
new file: hperster.txt 綠色字體
→ 提交
git commit -m ""
[master (root-commit) a7781a] ..., root-commit表示是第一次提交

七、從本地的一個已有項目開始

→ 下載一個示例項目
http://initializr.com
→ 好比下載項目在一個名稱爲web-project的目錄中
→ 來到web-project目錄下
git init
→ 查看列表,包括隱藏文件
ls al
.git/目錄存在着
→ 查看狀態
git status
On Branch master
→ 把全部文件放到staging area
git add .
→ 提交變化
git commit -m ""

八、從遠程的一個git項目開始

→ 遠程的git項目
https://githbu.com/scm-ninja/starter-web
→ 點擊Fork按鈕把項目加入到本身的github帳戶下
→ 複製https url
→ 拷貝到本地
git clone https://github.com/somename/starter-web.git

九、簡單使用add, commit, pull, push

→ 本地一個git目錄
→ 建立一個新文件hipster.txt
→ 查看狀態
git status
hipster.txt紅色字體
→ add
git add hipster.txt
→ commit
git commit -m ""
[master ba5b0f0],master是默認的分支,ba5b0f0是SHA-1,用來標記每一次提交
→ 從遠程拉取
git pull origin master
強烈推薦養成的習慣:commit以後,先pull,再push
→ 推到遠程
git push origin master
5c05047..ba5b0f0 master → master, 表示從本地的master默認分支推送到遠程的master分支

十、git的tracking files

→ 輸入以下查看git repository tracking的全部文件
git ls-files
→ 把多個修改放到staging area
git add .


十一、回滾提交的變化

→ 從staging area中移除
git reset HEAD level1-file.txt
→ 回滾
git checkout -- level1-file.txt

十二、重命名文件

→ 重命名,好比把level3-file.txt重命名爲level3.txt,使用git的重命名命令
git mv level3-file.txt leve3-file.txt
→ 查看狀態
git status
renamed: level3-file.txt → level3.txt,綠色字體
也就是重命名後,依然在staging area,不須要從新add
→ 提交變化
git commit -m ""


→若是使用操做系統的命令,重命名某個文件
mv level2-file.txt leve2.txt
→ 查看狀態
git status
deleted: level1-file.txt 紅色字體
level2.txt 紅色字體
說明檔使用操做系統的命令,會刪除原先的,而且建立一個新的,而且被刪除的和新建的都不在staging arean
→ add
git add -A
→ 提交變化

移動文件也是類似的道理。

1三、移除文件

→ 建立一個文件doomed.txt
→ git status
doomed.txt紅色字體
→ 使用git命令移除
git rm doomed.txt
提示沒法移除,由於尚未tracking這個文件呢
→ 那就使用操做系統命令刪除
rm doomed.txt
→ ls
沒有
→ git status
也沒有
也就是說,剛建立的文件沒有被tracking,使用操做系統的刪除命令是能夠的


若是刪除一個被tracking的文件呢?

→ 查看全部正在被tracking的文件
git ls-files
好比有一個newfile.txt文件
→ 使用git命令刪除
git rm newfile.txt
→ 使用ls命令,已再也不目錄中
→ 使用git status
deleted: newfile.txt 綠色字體
→ git commit -m "",也就是讓repository知道這個文件已被刪除
→ 使用git status
沒有
也就是說,使用git的rm命令刪除staging area中的文件,也是物理刪除,執行命令後必須告訴或同步到repository,commit一下

tracking中的文件被刪除,如何回滾呢?


→ 查看全部正在被tracking的文件
git ls-files
好比有一個hipster.txt文件
→ 使用git命令刪除tracking的文件
git rm hipster.txt
→ ls
發現不在目錄中了
→ git status
deleted: hipster.txt 綠色字體,說明這個文件也在staging area了,對git來講,這個文件尚未被真正刪除
→ 此時想把這個文件從staging area中拉出來
git reset HEAD hipster.txt
→ ls
依然不在目錄中
→ git status
deleted: hipster.txt 紅色字體,說明這個文件依然被track,但在目錄中已經不存在。注意從staging area中拉出來和是不是tracking是兩碼事。
→ 回滾
git checkout -- hipster.txt

注意:若是咱們想回滾,先必須使用reset HEAD命令把文件從staging area中拉出來
→ ls目錄中存在文件,git status發現文件再也不被track

如何刪除目錄呢?

→ 好比有一個目錄是level1
→ rm -rf level1
→ ls查看,目錄已經沒有
→ git status
deleted: leve1/leve1.txt 紅色字體
deleted: leve11/level2/level2.txt 紅色字體
deleted: level1/level2/level1/level3.txt 紅色字體

level1以及子目錄都標記爲刪除,還在track狀態,但並不在staging area中
→ git add -A

deleted: leve1/leve1.txt 綠色字體
deleted: leve11/level2/level2.txt 綠色字體
deleted: level1/level2/level1/level3.txt 綠色字體

在track狀態,而且在staging area了,準備提交
→ 提交變化

1四、git歷史記錄

→ 查看語法
git help log
→ git log
查看到全部的提交記錄
→ git log --abbrev-commit
查看精簡的commit編號
→ git log --oneline --graph --decorated
→ git log ae6f872...761b911
→ git log --sicne="3 days ago"
→ 查看某個文件的歷史記錄
git log -- hopster.txt
→ git log --follow -- level1/level2/level3
→ 查看某次提交
git show b19...

1五、別名

→ 好比原本查看歷史記錄的這樣寫
git log --all --graph --decorate --oneline
可不能夠寫成 git hist來獲得相同的結果呢?
→ 在全局配置
git config --global alias.hist "log --all --graph --decorate --oneline"
→ 使用別名命令
git hist
→ 如何修改別名命令呢
其實是存在在.gitconfig文件中,相似:
[alias]
hist = log --all --graph --decorate --oneline

1六、忽略沒必要要的文件

→ 存放在哪裏呢
.gitignore
→ git add .gitignore
→ git status
new file: .gitignore
→ git commit -m ""
→ 來到.gitignore文件
*.log

1七、推送
→ 先拉取
git pull origin master
→ 再推送
git push origin master

git

相關文章
相關標籤/搜索