臺州企業(yè)網(wǎng)站搭建電話南寧seo怎么做優(yōu)化團隊
git筆記
git是一個分布式版本控制系統(tǒng),它的優(yōu)點有哪些呢?分為以下幾個部分
- 與集中式的版本控制系統(tǒng)比起來,不用擔心單點故障問題,只需要互相同步一下進度即可。
- 支持離線編輯,每一個人都有一個完整的版本庫。
- 跨平臺支持
- 性能高效
安裝和初始化配置
git的安裝方式有方式
- 帶GUI的git,帶有圖形化界面
- 命令行安裝
個人比較推薦命令行安裝的方式,我采用的是centos 7.x的系統(tǒng)
- 添加 CentOS/RHEL 7 存儲庫
sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
- yum安裝git
sudo yum install git -y
初始化git
- 配置用戶名
git config --global user.email '你的郵箱'
- 配置郵箱
git config --global user.email '你的密碼'
創(chuàng)建倉庫
在git中,創(chuàng)建倉庫有兩種方式
- 使用git init
git init
- git init reop name
git init name
- 從gitee/github已有的倉庫,創(chuàng)建倉庫(使用clone的方式)
git clone git@gitee.com:tmeermer/hnys.git
工作區(qū)和文件狀態(tài)
git有三個工作區(qū)域分為工作區(qū),暫存區(qū),本地倉庫?,F(xiàn)在來簡單解釋一下這三個區(qū)域
工作區(qū):當前的工作目錄,所有的操作都在這里進行
暫存區(qū):工作區(qū)完成工作后,將產(chǎn)生的文件推送到暫存區(qū),臨時保存這些文件??梢岳斫鉃橐粋€臨時的雜貨鋪
本地倉庫:這里存放最終的成品,也就是倉庫。
添加和提交文件
- 添加文件
git add filename
添加時后面需要添加文件名,也可使用通配符進行批量提交
git add *.txt
現(xiàn)在該命令就只會提交以txt為后綴的文件了,當然也可以使用.來提交當前文件夾下的所有文件
git add .
- 提交文件
git commit -m "這是第一次提交"
- -m參數(shù)的含義是說明此次提交的主要信息,如果不加上m參數(shù),git會默認打開vim編輯器,來輸入提交的信息
- 查看提交狀態(tài)
git status;
其中查看提交日志的命令是
git log
也可以加上參數(shù)查看簡潔的提交日志
git log --oneline
其中有郵箱和名稱,都是通過我們之前使用的config
命令來配置的。
git reset 回退版本
在日常開發(fā)的時候,我們通常都有進行版本回退的需求。就可以使用reset這個命令以下是它的每個參數(shù)含義
soft
參數(shù)的含義是:回退到某一次的提交位置,但是工作區(qū)和暫存區(qū)的內(nèi)容是保存的
·hard·
參數(shù)的含義是:回到某一次的提交位置,但是工作區(qū)和暫存區(qū)的內(nèi)容全部丟棄
mixed
參數(shù)介于sort和hard中間,工作區(qū)的內(nèi)容保留但是暫存區(qū)的內(nèi)容刪除
soft測試
現(xiàn)在來測試soft參數(shù)的命令產(chǎn)生的作用
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt
現(xiàn)在創(chuàng)建了三個txt的文件并且使用了以下命令進行提交,分為三次
git add file1.txt
git commit -m "第一次提交"
git add file2.txt
git commit -m "第二次提交"
git add file3.txt
git commit -m "第三次提交"
查看提交結(jié)果
現(xiàn)在是已經(jīng)有三次提交了,現(xiàn)在回退到第二次提交 7b6b999
git reset --soft 7b6b999
可以發(fā)現(xiàn)真的回退到了第二次提交這個位置,而且暫存區(qū)和工作區(qū)的文件都沒有被丟棄
在提交的過程中出現(xiàn)了nothing to commit, working tree clean
問題,原因是:
暫存區(qū)沒東西獲或者東西都提交到版本庫中的當前分支,且工作區(qū)
中的文件都被git跟蹤了(都git add .)
解決方案:修改需要提交的文件中的任何一處(空格都行),然后重新add,commit。
hard測試
現(xiàn)在來測試hard參數(shù)會產(chǎn)生什么樣的效果,分為了三個文件夾進行測試
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt
先創(chuàng)建三個txt文件,都進行依次提交
git add file1.txt
git commit -m "這是第一次提交"
git add file2.txt
git commit -m "這是第二次提交"
git add file3.txt
git commit -m "這是第三次提交"
進行回退操作,回退至d7a1e8a
測試發(fā)現(xiàn),暫存區(qū)和工作區(qū)的文件的file3.txt
都被丟棄了。
hard參數(shù)的話,需要慎用!
mixed測試
現(xiàn)在來測試mixed參數(shù),還是添加三個txt文件
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt
依次進行提交
git add file1.txt
git commit -m "這是第一次提交"
git add file2.txt
git commit -m "這是第二次提交"
git add file3.txt
git commit -m "這是第三次提交"
進行回退操作,回退至第二次提交:d02077e
git reset --mixed d02077e
查看暫存區(qū)和目錄下的文件狀態(tài)
可以發(fā)現(xiàn)工作區(qū)的文件還在,但是暫存區(qū)的不存在了,此時HEAD指針指向了第二次提交的位置。
git diff 查看差異
當需要查看工作區(qū)和暫存區(qū)的內(nèi)容是否有差異時,需要使用以下命令查看差異
git diff
需要查看之前任意的幾個版本的差異
git diff HEAD~X HEAD
也可直接使用來查看最后一個版本之前的差異
git diff HEAD
git diff HEAD~ HEAD
還可以在后面加上文件名,只查看該文件的差異
git diff HEAD~1 HEAD file2.txt
每次提交都有一個哈希值,也可以使用這個值來判斷這兩次提交之間的差異
git diff d7a1e8a 9a857be
使用git rm 刪除文件
在使用git時,想刪除本地工作區(qū)和暫存區(qū)的文件時,如果使用Linux的系統(tǒng)命令的話會比較麻煩
rm file1.txt
刪除完查看狀態(tài),可以發(fā)現(xiàn)在工作區(qū)的文件已顯示被刪除了,還需要使用以下命令來更新,這里的提交是要告訴暫存區(qū),在下一次提交的時候file1.txt已經(jīng)被刪除了!
git add .
git commit -m "delete file1.txt"
但是git給我們提供了 git rm 命令,可以讓操作變得更簡單
git rm file
測試一下、
git rm file2.txt
這次可以發(fā)現(xiàn),暫存區(qū)和工作區(qū)都同步被刪除了,這就是 git rm命令的作用。
.gitgnore忽略文件
這個文件的作用是,讓我們忽略掉一些不應(yīng)該加入到版本庫中的文件,這樣可以讓我們的版本庫變得更加干凈和更小
這是我們需要忽略的文件,以免帶來不必要的風險
現(xiàn)在向我們的本地倉庫中添加.gitignore文件
echo "acess.log" > .gitignore
vim .gitignore
// 添加如下內(nèi)容
access.log
*.log
添加到暫存區(qū)
git add .
提交到本地倉庫
git commit -am "full submit"
查看效果
可以發(fā)現(xiàn)我們創(chuàng)建的日志文件并沒有被提交到緩存區(qū)。
如果打算要忽略全部的日志文件,可以參考以下寫法
*.log
# 忽略temp目錄下的文件
temp/
關(guān)聯(lián)本地倉庫和遠程倉庫
之前演示的都是本地倉庫進行的提交和各種測試,但是在實際的生產(chǎn)環(huán)境中往往都是需要連接到遠程倉庫進行提交和各種其他操作。但是先決條件是配置好了ssh密鑰,平臺可以選擇github/gitee。其中g(shù)itee相當于國內(nèi)的gihub,速度較快。
- 登錄gitee設(shè)置ssh公鑰(已省略,具體步驟可自行查閱)
網(wǎng)址:gitee
- clone遠程倉庫到本地,并且同步提交到遠程的master分支
git remote -v 查看有沒有遠程倉庫
git init .
git clone git@gitee.com:tmeermer/c-language-practice-code.git
//注:項目地址形式為:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
git add .
git commit -m "commit"
git push origin master
將本地的master分支推送到遠程的master分支,如果不存在則會覆蓋
分支管理
git中的分支可以看作一棵樹上的枝干,最粗壯的是主分支,其他分支都是從分支。git中的主分支叫做master,通常主分支都是用來發(fā)布重大更新的,其他開發(fā)和測試的過程都是在開發(fā)分支上完成的。測試通過后才會合并進主分支。
- git如何查看當前分支?
git branch
- git如何創(chuàng)建分支?
git checkout dev
git status
- git中如何切換分支?
git checkout branch--name
- git中如何合并分支?
git memger branch--name
- git中如何刪除無用的分支?
git branch -d branch--name
git解決合并沖突
現(xiàn)在來模擬兩個兩個分支修改了同一處的情況,這樣會導(dǎo)致git發(fā)生合并沖突,從而合并失敗
在以上操作中,我們在兩個分支中提交了一樣的內(nèi)容,導(dǎo)致了沖突。
git init myproject# 創(chuàng)建master分支
git checkout -b master# 向文件內(nèi)寫入內(nèi)容
echo "This is a line added in feature-branch." > example.txtvim example.txt
```
"This is a line added in feature-branch."
測試
```
git add .
git commit -m "feat commit "# 創(chuàng)建feat-branch 分支
git checkout -b feat-branchvim example.txt
```
"This is a line added in feature-branch."
測試
```
git add .
git commit -m "feat commit "git checkout mastergit merge master# 合并分支失敗
git status
現(xiàn)在解決沖突需要修改
切換到master分支git checkout master
vim example.txt找到?jīng)_突的行修改的行進行修改git add .
git commit -m "commit this a master"切換到feat分支
git checkout feat-branch
修改沖突的位置
git add .
git commit -m "commit this a feat-branch"最后合并沖突
git merge master
以上就是如何解決git分支沖突的方法。
回退和rebase
分支的合并可以使用git merge 命令來進行合并,并且還會保存所有的提交記錄。git 還有另一種合并分支的方式就是使用rebase
git rebase feat-branch
rebase的翻譯叫做變基,在git中我們可以這么理解
首先rebase只能在主分支上提交嗎?其實不是的
它可以在任意分支上執(zhí)行,如果是在main分支上執(zhí)行
git rebase dev
則main上的提交記錄會變基到dev分支的末尾
如果是在dev分支上提交
git rebase main
dev的兩條提交記錄都會變基到Main分支上。只是順序不同罷了