git 記錄
參考網址:http://http://www.liaoxuefeng.com/,裏面的Git教程,學得很好,感謝廖老師的Git教程。
一、簡單介紹
- Git是分佈式版本控制系統
- 集中式版本控制vs分佈式版本控制
- 集中式版本控制系統,版本庫是集中存放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央服務器
- 分佈式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因爲版本庫就在你自己的電腦上。
- 集中式版本控制系統相比,分佈式版本控制系統的安全性要高很多,因爲每個人電腦裏都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裏複製一個就可以了。
- 在實際使用分佈式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因爲可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分佈式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。
二、安裝記錄
三、常用命令
1、設置用戶名和郵箱。git config命令的–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置
//
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
2、創建版本庫
在合適的工作目錄,創建文件夾,在創建的文件夾當前目錄執行
git init
創建成功後,當前目錄下多了一個.git的目錄,這個目錄默認是隱藏的
3、把文件添加到倉庫,比如這裏創建了一個文件readme.txt
git add readme.txt
4、把文件提交到倉庫
git commit -m "first commit"
-m 後面輸入的是本次提交的說明,方便後面查詢提交記錄,和方便其他人閱讀
5、查看當前倉庫的狀態,可以顯示改動了的文件
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
6、查看具體的改動
git diff readme.txt
通過這個命令可以顯示具體修改的內容
7、查看歷史提交記錄
$ git log
commit cc592f6abc70df78d25713af7f3977f67d3d9d66
Author: cigar0223 <415718252@qq.com>
Date: Wed Apr 19 16:00:06 2017 +0800
add readme.txt
commit 0dba4155dc928b6d9e9be4a4fc4fb39cdd9433df
Author: cigar0223 <415718252@qq.com>
Date: Wed Apr 19 15:57:37 2017 +0800
first commit
加–pretty=oneline可以方便查看
$ git log --pretty=oneline
cc592f6abc70df78d25713af7f3977f67d3d9d66 add readme.txt
0dba4155dc928b6d9e9be4a4fc4fb39cdd9433df first commit
8、版本回退
$ git reset --hard HEAD^
HEAD is now at 0dba415 first commit
Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
$ git reset --hard 0dba41
HEAD is now at 0dba415 first commit
可以在–hard後面指定git log 查詢出來的commit id,就可以指定到某一個版本,版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因爲Git可能會找到多個版本號
9、查看當前文本內容
$ cat readme.txt
init
cat可以查看文件的內容
10、查詢歷史執行命令
$ git reflog
cc592f6 HEAD@{0}: reset: moving to cc592f
0dba415 HEAD@{1}: reset: moving to HEAD^
cc592f6 HEAD@{2}: commit: add readme.txt
0dba415 HEAD@{3}: commit (initial): first commit
11、查看工作區和版本庫裏面最新版本的區別
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 5669882..b0dd824 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,5 @@
init
add
-modify
\ No newline at end of file
+modify
+
+log log
\ No newline at end of file
12、丟棄工作區的修改
git checkout -- readme.txt
git checkout其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”
13、把暫存區的修改撤銷掉(unstage),重新放回工作區
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
14、刪除一個文件
$ git rm second.txt
rm 'second.txt'
15、與遠程倉庫關聯
git remote add origin https://git.coding.net/Cigar0423/gitStudy.git
16、把本地庫推送到遠程倉庫
git push -u origin maste
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令
git push origin master
此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改
17、從遠程庫克隆到本地
git clone https://git.coding.net/Cigar0423/gitStudy.git
18、創建並切換到分區
$ git checkout -b work
Switched to a new branch 'work'
git checkout命令加上-b參數表示創建並切換,相當於以下兩條命令:
git branch work
git checkout work
19、查看當前分支
$ git branch
master
* work
20、合併分支
$ git merge work
Updating 0d14e2b..e29e6eb
Fast-forward
second.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 second.txt
合併分支要先切到最終要合併到的分支
21、刪除分支
$ git branch -d work
Deleted branch work (was e29e6eb).
22、看到分支合併圖
git log --graph
23、以強制禁用Fast forward模式合併分支
git merge --no-ff -m "merge with no-ff" work
合併分支時,加上–no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。
24、把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作
git stash
查看存儲的工作現場
git stash list
恢復工作現場,但是恢復後,stash內容並不刪除
git stash apply
恢復後,刪除stash內容
git stash drop
恢復的同時把stash內容也刪了
git stash pop
25、強行刪除未提交的分支
git branch -D work
26、查看遠程庫信息
git remote
27、顯示遠程庫詳細信息
git remote -v
28、推送分支,就是把該分支上的所有本地提交推送到遠程庫
git push origin master
29、從遠程抓取分支
git pull
30、在本地創建和遠程分支對應的分支
git checkout -b branch-name origin/branch-name
31、建立本地分支和遠程分支的關聯
git branch --set-upstream branch-name origin/branch-name
32、創建標籤
git tag v1.0
git tag v0.9 6224937
v0.9後面是commit Id
33、查看所有標籤
git tag
34、創建簽名並指定標籤信息
git tag -a v0.1 -m "version 0.1 released" 3628164
35、用PGP簽名標籤
git tag -s v0.2 -m "signed version 0.2 released" fec145a
36、查看標籤信息
git show v0.9
37、刪除標籤
git tag -d v0.1
38、推送某個標籤到遠程
git push origin v1.0
39、一次性推送全部尚未推送到遠程的本地標籤
git push origin --tags
40、刪除一個遠程標籤
git push origin :refs/tags/v0.9
41、讓Git顯示顏色,會讓命令輸出看起來更醒目
git config --global color.ui true
42、強制添加被.gitignore忽略的文件
git add -f App.class
43、檢查忽略規則
git check-ignore -v App.class
44、
git config --global alias.st status
配置Git的時候,加上–global是針對當前用戶起作用的,如果不加,那隻針對當前的倉庫起作用。配置文件放在.git/config文件中。
四、工作區和暫存區
1、工作區
就是我們在電腦裏能看到的目錄
2、版本庫
- 工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
- Git的版本庫裏存了很多東西,其中最重要的就是稱爲stage(或者叫index)的暫存區
- 還有Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD
3、流程
- git add把文件添加進去,實際上就是把文件修改添加到暫存區
- git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支
- 因爲我們創建Git版本庫時,Git自動爲我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改
五、忽略特殊文件
1、Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件
2、忽略文件的原則是:
- 忽略操作系統自動生成的文件,比如縮略圖等
- 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;
- 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。