一、Git原理
1、Git是什么?
Git是目前世界上最先進的分布式版本控制系統(沒有之一)。
2、Git有什么特點?
簡單來說就是:高端大氣上檔次!
3、GIt與SVN區別
SVN管理:
屬於集中式版本控制系統,版本庫是集中存放在中央服務器,必須聯網才能工作,脫離局域網,采取互聯網提交大文件會比較慢
Git管理:
屬於分布式版本控制系統,根本沒有“中央服務器”,安全性高,每個人的電腦上都是一個完整的版本庫,即電腦硬盤上會有個版本這樣,你工作的時候,就不需要聯網了。即使中央服務器出了問題,從其他人那復制一個就好了
4、Git 工作流程
一般工作流程如下:
- 克隆 Git 資源作為工作目錄。
- 在克隆的資源上添加或修改文件。
- 如果其他人修改了,你可以更新資源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果發現錯誤,可以撤回提交並再次修改並提交。
下圖展示了 Git 的工作流程:
二、Git 配置
1、配置個人的用戶名稱和電子郵件地址
$ git config --global user.name "username"
$ git config --global user.email yourmail
2、在客戶端生成ssh key
- 安裝客戶端后在桌面任意空白處右擊
- 打開Git Base Here然后輸入下面命令
- 打開本地git bash,使用如下命令生成ssh公鑰和私鑰對
- ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回車(-C 參數是你的郵箱地址)
- 然后打開~/.ssh/id_rsa.pub文件(~表示用戶目錄,比如我的windows就是C:\Users\Administrator),復制其中的內容
- 打開gitlab,找到Settings -->Profile -->SSH Keys--->Add SSH Key,並把上一步中復制的內容粘貼到Key所對應的文本框,在Title對應的文本框中給這個sshkey設置一個名字,點擊Add key按鈕
三、Git常用操作
1、創建一個版本庫
Ps:只是一個空目錄哦
$ mkdir mytest
2、通過git init命令把這個目錄變成Git可以管理的倉庫
$ git init
Initialized empty Git repository in C:/Users/userAccount/Desktop/test/.git/
ps:目錄下會自動生成.git,誤刪,畢竟全靠它做版本管理
第一步,用命令git add告訴Git,把文件添加到倉庫:
$ git add readme.txt
執行上面的命令,沒有任何顯示,這就對了,Unix的哲學是“沒有消息就是好消息”,說明添加成功。
第二步,用命令git commit告訴Git,把文件提交到倉庫:
$ git commit -m "test add file"
[master (root-commit) 5a92835] test add file
1 file changed, 1 insertion(+)
create mode 100644 mytest/readme.txt
3、版本的操作內容操作查看
本地版本操作:(連續操作一個文件並提交好多次)
git log日志查看命令
$ git log
commit d9669171c9c5890fd282c40a7e7fe0c372074233 (HEAD -> master)
Date: Thu Apr 4 14:52:23 2019 +0800
test third version
commit 6b39a4a6ce09c472e7f9c09e50c79c78b2efee16
Date: Thu Apr 4 14:51:11 2019 +0800
test second version
commit 9e42e41abf01d85e163b3d63c41bf5b099920d47
Date: Thu Apr 4 14:47:32 2019 +0800
test first version
commit dca156cf9c72b17f5d1aaff88ebfbfc79d5b91e2
Date: Thu Apr 4 14:46:39 2019 +0800
test add file
:
比較直觀的方式查看
$ git log --pretty=oneline
4、版本回退操作
比如返回上一個版本
$ git reset --hard HEAD^
HEAD is now at 6b39a4a test second version
Git的版本是生成是十六進制生成的,我的上一版本是如截圖:
再查看日志當前版本是否為6b39a4a
回滾到某個指定版本
$ git reset --hard dca156cf
HEAD is now at dca156c test add file
再查看日志當前版本是否為dca156cf
優勢:回滾很快呀
5、git status 查看狀態
比如我對readme.txt內容做了修改,再輸入git status查看狀態
git checkout -- file可以丟棄工作區的修改,即撤銷修改
$ git checkout -- readme.txt
再次輸入git status 發現文件回滾到改動之前了
6、刪除文件操作
先增加一個文件
$ git add delete.txt
再刪除文件
$ rm delete.txt
查看文件狀態
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: delete.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: delete.txt
提交修改
$ git commit -m "remove test.txt"
[master cc6aa8f] remove test.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 mytest/delete.txt
7、將本地倉庫和遠程倉庫相關聯
$ git remote add origin git@172.16.5.128:RefainZero/demo.git
把本地庫的所有內容推送到遠程庫
$ git push -u origin master
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
Everything up-to-date
8、從遠程倉庫獲取代碼
$ git clone git@172.16.5.128:RefainZero/demo.git
Cloning into 'demo'...
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 16 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (16/16), done.
9、解決沖突
1)、先制造一個沖突
情景,readme.txt中的,文本默認是test
git status
修改本地的readme.txt中文本內容為“20191635”
在服務器也修改了readme.txt,修改文本內容為“就想沖突下”
2)、提交本地的代碼到遠程倉庫
在服務器執行git pull(獲取最新代碼)
不負眾望,果然發生代碼沖突
3)、解決文件中沖突的的部分
打開沖突的文件
4)、把沖突標記刪掉,把沖突解決正確
提交修改,並同步到遠程倉庫
$ git add readme.txt
$ git commit -m '解決沖突的測試'
[master 0feb18f] 解決沖突的測試
$ git push origin master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (8/8), 740 bytes | 740.00 KiB/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To 172.16.5.128:RefainZero/demo.git
ca9bc5e..0feb18f master -> master
再次從服務器上獲取最新代碼,驗證是否沖突
$ git pull
Already up to date.
四、附:Gitlab顯示的提交內容