一、git相關概念
1、git文件的三種狀態
- committed 已提交 ,表示數據已經安全的保存在本地數據庫中
- modified 已修改 ,表示修改了文件,但還沒保存到數據庫中
- staged 已暫存 ,表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
2、Git項目的三個工作區域:Git 倉庫、工作目錄以及暫存區域。
工作區 是對項目的某個版本獨立提取出來的內容。 這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改。
暫存區域 是一個文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。 有時候也被稱作`‘索引’’,不過一般說法還是叫暫存區域。
Git 倉庫 是 Git 用來保存項目的元數據和對象數據庫的地方。 這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這裏的數據。
3、Git 工作流程
(1)在作目錄中修改文件。
(2)暫存文件,將文件的快照放入暫存區域。(git add)
(3)提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。(git commit -m ‘’)
即:modified(工作目錄)–>staged(暫存區域)–>committed(Git倉庫)
工作目錄下的每一個文件都不外乎這兩種狀態:已跟蹤或未跟蹤。 已跟蹤的文件是指那些被納入了版本控制的文件,在上一次快照中有它們的記錄,在工作一段時間後,它們的狀態可能處於未修改,已修改或已放入暫存區。 工作目錄中除已跟蹤文件以外的所有其它文件都屬於未跟蹤文件,它們既不存在於上次快照的記錄中,也沒有放入暫存區。 初次克隆某個倉庫的時候,工作目錄中的所有文件都屬於已跟蹤文件,並處於未修改狀態。
編輯過某些文件之後,由於自上次提交後你對它們做了修改,Git 將它們標記爲已修改文件。 我們逐步將這些修改過的文件放入暫存區,然後提交所有暫存了的修改,如此反覆。所以使用 Git 時文件的生命週期如下:
二、Git倉庫配置
1、在自己的git上面創建一個名爲text的倉庫
2、在本地創建文件夾,打開Git Bash
3、創建一個名爲text的文件夾,設置用戶名稱和郵件地址,作爲一個標識。
4、git init
mkdir text
git config --global user.name "1623354901"
git config --global user.email [email protected]
#git init 把這個目錄變成git 可以管理的倉庫
git init
# 一旦使用 --global 選項,那麼該命令只需要運行一次,以後無論你在該系統上做任何事情,Git 都會使用那些信息。當想針對特定項目使用不同的用戶名稱與郵件地址時,可以在那個項目目錄下運行沒有 --global 選項的命令來配置。
這時候你當前testgit目錄下會多了一個.git的目錄,這個目錄是Git來跟蹤管理版本的,不要手動改動這個目錄裏面的文件,否則,會把git倉庫給破壞了
5、提交內容到倉庫
在text目錄下新建一個記事本文件 readme.txt 內容如下:11111111
(1)使用git add readme.txt將文件添加到暫存區
git add readme.txt
(2)使用命令git commit 將文件提交到倉庫
git commit -m "readme.txt"
(3)通過 git status 查看狀態,是否有文件未提交
修改readme.txt文件內容,再次使用git status查看結果
內容顯示文件已經被修改,未被提交
git diff readme.txt
如上可以看到,readme.txt文件內容從一行11111111改成 二行 添加了一行22222222內容。檢查內容修改無誤後,就可以提交到倉庫了,步驟和之前一樣
git add readme.txt
git status
git commit -m 'readme.txt增加了22222222'
git status
6、版本回退
在readme.txt文件中加入一行33333333
添加到暫存區,並提交到倉庫
查看歷史記錄
#顯示從最近到最遠的顯示日誌
git log
#將每次內容顯示爲一行
git log --pretty=oneline
版本回退
#回退到上一個版本
git reset --hard HEAD^
#回退到上上個版本
git reset --hard HEAD^^
#以此類推
#回退到前50版本
git reset --hard HEAD~50
#回退後再次回退到最新版本
git reset --hard版本號
#獲取版本號方法
git reflog
7、提交多個文件
們在readme.txt再添加一行內容爲4444444,接着在目錄下新建一個文件爲test.txt 內容爲test,我們先用命令 git status來查看下狀態,如下:
8、Git撤銷修改和刪除文件操作
(1)撤銷修改
在readme.txt文件中增加內容5555555555
撤銷此次操作方法
1>直接更改文件,add commit
2>恢復到上一個版本,使用git reset --hard HEAD^
3>gitcheck – file,丟棄工作區的修改
注意
readme.txt自動修改後,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態
另外一種是readme.txt已經放入暫存區了,接着又作了修改,撤銷修改就回到添加暫存區後的狀態
例如,在文件中加入666666666,放到暫存區,在增加7777777777,不添加到暫存區,使用撤銷命令,查看內容,只把內容7777777777撤銷了
注意:命令git checkout – readme.txt 中的 – 很重要,如果沒有 – 的話,那麼命令變成創建分支了。
(2)刪除文件
三、遠程倉庫
1、github上面註冊github賬號
2、創建SSH Key,在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果有的話,直接跳過此如下命令,如果沒有的話,打開命令行,輸入如下命令:ssh-keygen -t rsa –C “[email protected]”
這時候在.ssh目錄下看看有沒有公鑰(id_rsa.pub),私鑰(id_rsa)
3、登陸github,打開settings中的SSH and GPG keys,在Key文本框裏黏貼id_rsa.pub文件的內容。添加key,然後就能看到自己的key了
4、遠程同步
(1)創建一個新的倉庫,命名爲test
然後設置同步
在本地倉庫下運行
git remote add origin https://github.com/1623354901/test.git
#將本地倉庫分支master內容推送到遠程倉庫中去
# -u:Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
git push -u origin master
以後在本地再做了修改之後,通過
git push origin master
把本地master分支的最新修改推送到github上了
5、創建與合併分支
原理:廖雪峯網站分支部分裏講解的很詳細
#創建分支
git checkout -b dev
#上邊命令相當於
#git branch dev
#git checkout dev
#查看當前分支
git branch
git branch命令會列出所有分支,當前分支前面會標一個*號。
然後,我們就可以在dev分支上正常提交,比如對readme.txt做個修改,加上一行:Creating a new branch is quick
然後提交:
git add readme.txt
git commit -m "branch test"
現在,dev分支的工作完成,我們就可以切換回master分支:
git checkout master
切換回master分支後,再查看一個readme.txt文件,剛纔添加的內容不見了!因爲那個提交是在dev分支上,而master分支此刻的提交點並沒有變:
現在,我們把dev分支的工作成果合併到master分支上:
git merge dev
git merge命令用於合併指定分支到當前分支。合併後,再查看readme.txt的內容,就可以看到,和dev分支的最新提交是完全一樣的。
合併完成後,就可以放心地刪除dev分支了:
git branch -d dev
6、解決衝突
新建一個分支feature1
git checkout -b feature1
修改readme.txt最後一行,改爲:
Creating a new branch is quick AND simple.
在feature1分支上提交:
git add readme.txt
git commit -m "AND simple"
切換到master分支:
git checkout master
在master分支上把readme.txt文件的最後一行改爲:
Creating a new branch is quick & simple.
git add readme.txt
git commit -m "& simple"
現在,master分支和feature1分支各自都分別有新的提交,變成了這樣:
種情況下,Git無法執行“快速合併”,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突
果然衝突了!Git告訴我們,readme.txt文件存在衝突,必須手動解決衝突後再提交。git status也可以告訴我們衝突的文件:
直接查看readme.txt的內容:
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,我們修改如下後保存:Creating a new branch is quick and simple.
再提交
現在,master分支和feature1分支變成了下圖所示:
用帶參數的git log也可以看到分支的合併情況:
刪除feature1分支
7、分支管理策略
通常,合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。