1. 程式人生 > 程式設計 >SpringBoot宣告式事務的簡單運用說明

SpringBoot宣告式事務的簡單運用說明

一、概念

1、四個工作區域

Git本地有四個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)、git倉庫(Remote Directory)。檔案在這四個區域之間的轉換關係如下:

Workspace: 工作區,就是你平時存放專案程式碼的地方

Index / Stage: 暫存區,用於臨時存放你的改動,事實上它只是一個檔案,儲存即將提交到檔案列表資訊

Repository: 倉庫區(或版本庫),就是安全存放資料的位置,這裡面有你提交到所有版本的資料。其中HEAD指向最新放入倉庫的版本

Remote

: 遠端倉庫,託管程式碼的伺服器,可以簡單的認為是你專案組中的一臺電腦用於遠端資料交換

2、工作流程

git的工作流程一般是這樣的:

1、在工作目錄中新增、修改檔案;

2、將需要進行版本管理的檔案放入暫存區域;

3、將暫存區域的檔案提交到git倉庫。

因此,git管理的檔案有三種狀態:已修改(modified),已暫存(staged),已提交(committed)

3、檔案的四種狀態

版本控制就是對檔案的版本控制,要對檔案進行修改、提交等操作,首先要知道檔案當前在什麼狀態,不然可能會提交了現在還不想提交的檔案,或者要提交的檔案沒提交上。

GIT不關心檔案兩個版本之間的具體差別,而是關心檔案的整體是否有改變,若檔案被改變,在新增提交時就生成檔案新版本的快照,而判斷檔案整體是否改變的方法就是用

SHA-1演算法計算檔案的校驗和。

Untracked: 未跟蹤, 此檔案在資料夾中, 但並沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.

Unmodify: 檔案已經入庫, 未修改, 即版本庫中的檔案快照內容與資料夾中完全一致. 這種型別的檔案有兩種去處, 如果它被修改, 而變為Modified.

如果使用git rm移出版本庫, 則成為Untracked檔案

Modified:檔案已修改, 僅僅是修改, 並沒有進行其他的操作. 這個檔案也有兩個去處, 通過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過,

返回到unmodify狀態, 這個git checkout即從庫中取出檔案, 覆蓋當前修改

Staged:暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的檔案和本地檔案又變為一致, 檔案為Unmodify狀態. 執行git reset HEAD filename取消暫存,

檔案狀態為Modified

下面的圖很好的解釋了這四種狀態的轉變:

新建檔案--->Untracked

使用add命令將新建的檔案加入到暫存區--->Staged

使用commit命令將暫存區的檔案提交到本地倉庫--->Unmodified

如果對Unmodified狀態的檔案進行修改---> modified

如果對Unmodified狀態的檔案進行remove操作--->Untracked

二、四個區域常用命令

1、新建程式碼庫

# 在當前目錄新建一個Git程式碼庫
 git init
# 新建一個目錄,將其初始化為Git程式碼庫
git init [project-name]
# 下載一個專案和它的整個程式碼歷史
git clone [url]

2、檢視檔案狀態

#檢視指定檔案狀態
git status [filename]
#檢視所有檔案狀態
git status

3、工作區<-->暫存區

# 新增指定檔案到暫存區
git add [file1] [file2] ...
# 新增指定目錄到暫存區,包括子目錄
git add [dir]
# 添加當前目錄的所有檔案到暫存區
git add .
#當我們需要刪除暫存區或分支上的檔案, 同時工作區也不需要這個檔案了, 可以使用(⚠️)
git rm file_path
#當我們需要刪除暫存區或分支上的檔案, 但本地又需要使用, 這個時候直接push那邊這個檔案就沒有,如果push之前重新add那麼還是會有。
git rm --cached file_path
#直接加檔名   從暫存區將檔案恢復到工作區,如果工作區已經有該檔案,則會選擇覆蓋
#加了【分支名】 +檔名  則表示從分支名為所寫的分支名中拉取檔案 並覆蓋工作區裡的檔案
git checkout

4、工作區<-->資源庫(版本庫)

#將暫存區-->資源庫(版本庫)
git commit -m '該次提交說明'
#如果出現:將不必要的檔案commit 或者 上次提交覺得是錯的  或者 不想改變暫存區內容,只是想調整提交的資訊
#移除不必要的新增到暫存區的檔案
git reset HEAD 檔名
#去掉上一次的提交(會直接變成add之前狀態)   
git reset HEAD^ 
#去掉上一次的提交(變成add之後,commit之前狀態) 
git reset --soft  HEAD^ 

5、遠端操作

# 取回遠端倉庫的變化,並與本地分支合併
git pull
# 上傳本地指定分支到遠端倉庫
git push

6、其它常用命令

# 顯示當前的Git配置
git config --list
# 編輯Git配置檔案
git config -e [--global]
#初次commit之前,需要配置使用者郵箱及使用者名稱,使用以下命令:
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
#調出Git的幫助文件
git --help
#檢視某個具體命令的幫助文件
git +命令 --help
#檢視git的版本
git --version

三、checkout branch log diff

1、checkout 切換分支

git checkout 分支名 #切換分支
#如果在當前分支上對檔案進行修改之後,沒有commit就切換到另外一個分支b,
這個時候會報錯,因為沒有commit的檔案在切換分支之後會不覆蓋。所以Git 報錯提示。
git checkout -f 分支名 #強制切換到分支
#如果在當前分支上對檔案進行修改之後強制切換另一個分支,那麼當前分支修改東西直接丟棄,所以-f 引數一定一定要非常非常小心使用,一般情況下不建議使用,除非真的要強制去執行

git checkout - # 切換到上一個分支
git checkout . # 撤銷工作區中當前目錄中的所有更改

2、branch 檢視新建分支

 git branch     # 列出所有本地分支
 git branch -r  # 列出所有遠端分支
 # 新建一個分支,但依然停留在當前分支 這個時候本地已經有新分支了,但遠端還沒有,只有切換到新分支push後,遠端就有了
 git branch [branch-name]
 git checkout -b [branch]     # 新建一個分支,並切換到該分支 
 git branch -d [branch-name]  #刪除分支 已合併的分支 *不能刪除當前所在的分支
 git branch -D dev            #強行刪除分支  分支未合併
 git push origin --delete [branch-name] # 刪除遠端分支

3、log 檢視提交記錄

git log -數字    #表示檢視最近幾次的提交
git log -p -2    #顯示最近兩次提交的不同點
git log --author #檢視具體某個作者的提交
git log --online #輸出簡要的資訊

4、merge 合併分支

git merge [branch] #合併指定分支到當前分支

5、diff 解決衝突 製作補丁

合併分支時,如果兩個分支都對同一檔案進行修改,那麼合併的時候就會有衝突。

git diff HEAD  #比較當前工作區和上一次提交時檔案的差異
git diff HEAD^ #比較上一次提交和上上次提交的檔案差異
git diff 分支名 #檢視當前分支跟指定的分支的差異
git diff 分支名1 分支名2  #檢視兩個指定分支(已提交的)的差異,分支2 跟分支1的差別
git diff --name-only --diff-filter=U #檢視衝突檔案 這個太有用啦

HEAD用法

HEAD最近一個提交

HEAD^上一次提交

HEAD^ ^上一次的 上一次的提交(倒數第三次)

HEAD^^^倒數 第四次的 提交

6、reset 版本回退

語法:git reset --hard 版本號 注意:回退只是在本地進行回退,遠端倉庫還是最新的,所以之後要先pull

git reset --hard HEAD^   #將 Git 回退到上一個版本 也就是上上次提交的時候,這樣就可以撤銷當次提交的資訊
git reset --hard 4b2a0c8 #版本號(commit id)沒必要寫全,一般寫前七位就夠了,Git會自動去匹配。

四、.gitignore 檔案

大量與專案無關的檔案全推到遠端倉庫上,同步的時候會非常慢,且跟編輯器相關的一些配置推上去之後,別人更新也會受其影響。所以,我們使用該檔案,

對不必要的檔案進行忽略,使其不被git追蹤。

一把情況下,.gitignore檔案,在專案一開始建立的時候就建立,並推送到遠端伺服器上。這樣大家初次同步專案的時候,就是用到該檔案,避免以後,團隊

成員把與專案無關的檔案,傳到遠端伺服器上。

*.log           #表示忽略專案中所有以.log結尾的檔案
123?.log        #表示忽略專案中所有以123加任意字元的檔案
/error.log      #表示忽略專案中根目錄中的error.log 這個檔案
src/main/test/* #表示忽略/src/main/test/目錄下的所有檔案
**/java/        #匹配所有java目錄下的所有檔案
!/error.log     #表示在之前的匹配規則下,被命中的檔案,可以使用!對前面的規則進行否定

對於已經提交到遠端或本地倉庫的檔案,.gitignore配置之後不會生效。我們必須先刪除本地暫存區裡的檔案,之後在加上.gitignore 檔案,最後再把變更提交到遠端倉庫上。

git rm --cached 檔名     #從暫存區刪除某個檔案
git rm -rf --cached 資料夾 #表示遞迴刪除暫存區該資料夾的所有東西

五、案例

1、commit後,需要回到上一個版本,這個版本資料全部不要

(1)為保險起見,我們可以先切一個分支出來,儲存當前版本,必然以後