git本地的基本使用

目錄

git init    初始化倉庫

git status    查看倉庫的狀態​

git add    向暫存區中添加文件

git各個區域和文件狀態

git commit    保存倉庫的歷史記錄

1、記述一行提交信息:   git commit -m "提交描述"

2、記述詳細提交信息  git commit

git log    查看提交日誌

git log --pretty=short  只顯示提交信息的第一行

git log 目錄/文件   只顯示指定目錄、文件的日誌

git log -p  顯示文件的改動

git log -p 目錄/文件  顯示特定的目錄/文件的改動

git diff    查看更改前後的差別

git diff    查看工作樹和暫存區的差別

git diff HEAD    查看工作樹和最新提交的差別

分支的操作

git branch——顯示分支一覽表

git checkout -b——創建、切換分支

 git merge——合併分支

git log --graph——以圖表形式查看分支

 git reset——回溯歷史版本

解決衝突

git commit --amend——修改提交信息

git rebase -i——壓縮歷史


git init    初始化倉庫

初始化之後,會在當前目錄生成一個.git的隱藏文件夾,這個 .git 目錄裏存儲着管理當前目錄內容所需的倉庫數據
這個目錄的內容稱爲“附屬於該倉庫的工作樹”

git status    查看倉庫的狀態

當前正處於 master 分支下,nothing to commit說明倉庫沒有任何更改,沒有可提交的內容

創建 README.md文件,然後再輸入命令git status

可以看到在 Untracked files(還沒有加入緩衝區) 中顯示了 README.md 文件

git add    向暫存區中添加文件

運行 git add README.md後,輸入命令git status查看狀態


README.md 文件顯示在 Changes to be committed(加入緩衝區) 中了

git各個區域和文件狀態


 

  • 工作區間: 即我們創建的工程文件, 在編輯器可直觀顯示;
  • 緩存區: 只能通過git GUI或git shell 窗口顯示,提交代碼、解決衝突的中轉站;
  • 本地倉庫: 只能在git shell 窗口顯示,連接本地代碼跟遠程代碼的樞紐,不能聯網時本地代碼可先提交至該處;
  • 遠程倉庫: 即保存我們代碼的服務器,本文以公共版本控制系統:github爲例,登錄github賬號後可直觀顯示;

對於任何一個文件,在 Git 內都只有三種狀態:

1、已修改(modified)      Git 的工作目錄

2、已暫存(staged)         暫存區域

3、已提交(committed)    本地倉庫

git commit    保存倉庫的歷史記錄

1、記述一行提交信息:   git commit -m "提交描述"

2、記述詳細提交信息  git commit

在README.md中添加 ### hello

通過git status查看狀態

git commit回車結果如下:

Changes to be committed可以看到本次提交中包含的文件

在編輯器中記述提交信息的格式如下。
● 第一行:用一行文字簡述提交的更改內容
● 第二行:空行
● 第三行以後:記述更改的原因和詳細內容

編輯完成,wq保存退出即可

如果想終止提交,請將提交信息留空並直接關閉編輯器,隨後提交就會被中止。

git log    查看提交日誌

git log --pretty=short  只顯示提交信息的第一行

git log 目錄/文件   只顯示指定目錄、文件的日誌

git log -p  顯示文件的改動

git log -p 目錄/文件  顯示特定的目錄/文件的改動

git diff    查看更改前後的差別

git diff    查看工作樹和暫存區的差別

把### hello改爲### hello world

“+”號標出的是新添加的行,被刪除的行則用“-”號標出

git diff HEAD    查看工作樹和最新提交的差別

在執行 git commit命令之前先執行git diff HEAD命令,查看本次提交與上次提交之間有什麼差別,等確認完畢後再進行提交。這裏的 HEAD 是指向當前分支中最新一次提交的指針。保險起見,我們用git log查看一下提交日誌,確認提交是否成功。

分支的操作

爲了便於說明,重新建一個文件夾git-tutorial,git init初始化後,建一個README.md文件,並依次用命令git add README.md、git commit -m "first commit"提交

git branch——顯示分支一覽表

 

master 分支左側標有“*”(星號),表示這是我們當前所在的分支

git checkout -b——創建、切換分支

執行git checkout -b feature-A命令,創建名爲 feature-A 的分支

git checkout -b feature-A等於下面2條命令

git branch feature-A    # 創建feature-A分支
git checkout feature-A    # 切換到feature-A分支

這時候查看,已經切換到feature-A分支下

切換回上一個分支  git checkout -

在feature-A分支下,添加 - feature-A,如圖,

用下面命令行提交(如果不提交,更改的文件內容不會記錄在feature-A分支,切回master分支後,相當於feature-A什麼東西也沒有修改)

git add README.md
git commit -m "Add feature-A"

 插入2個概念:

  • 特性分支:集中實現單一特性(主題),除此之外不進行任何作業的分支。
  • 主幹分支:主幹分支是剛纔我們講解的特性分支的原點,同時也是合併的終點。通常人們會用 master 分支作爲主幹分支。

主幹分支和特性分支都可以有多個。一般來說,一個特性分支對應一個功能,一個主幹分支對應一個軟件版本

 git merge——合併分支

首先 git checkout master 切換到 master 分支

爲了在歷史記錄中明確記錄下本次分支合併,我們需要創建合併提交。因此,在合併時加上 --no-ff參數

git merge --no-ff feature-A

默認信息中已經包含了是從 feature-A 分支合並過來的相關內容,所以可不必做任何更改。將編輯器中顯示的內容保存,關閉編輯器,然後就會看到下面的結果。

git log --graph——以圖表形式查看分支

 git reset——回溯歷史版本

 git rest --hard 哈希值  恢復到某個時間點的狀態

git checkout -b fix-B  創建 fix-B 分支,並在README.md添加一行- fix-B

運行下面命令提交

git add README.md
git commit -m "Fix B"
現在狀態如圖:


 目標如圖:

 git log命令只能查看以當前狀態爲終點的歷史日誌。所以這裏要使用 git reflog命令,查看當前倉庫的操作日誌

圈出來部分表示feature-A 特性分支合併後的狀態,對應哈希值爲 39d1ac0

切換回master分支:git checkout master,回溯歷史版本:git reset --hard 39d1ac0 此時狀態如圖

 合併fix-B分支:git merge --no-ff fix-B

解決衝突

打開README.md文件

 =======上面是當前 HEAD 的內容,下面要合併的 fix-B 分支中的內容

本次修正讓 feature-A 與 fix-B 的內容並存於文件之中。但是在實際的軟件開發中,往往需要刪除其中之一,所以各位在處理衝突時,務必要仔細分析衝突部分的內容後再行修改。修改如下

執行git add README.md和git commit -m "Fix conflict"完成代碼提交

git commit --amend——修改提交信息

如果想把上面的提交信息 Fix conflict 更改爲 Merge branch 'fix-B' ,輸入git commit --amend

 進入如下界面

把圖中的Fix conflict改爲Merge branch 'fix-B',再用git log --graph查看,發現提交信息已經修改。

git rebase -i——壓縮歷史

創建分支feature-C,並且切換到feature-C下,再README.md添加feature-C,但是由於寫快了,寫成了feature-D

但是已經提交了,提交信息爲 Add feature-C
修改錯誤後如下

然後用命令 git commit -am "Fix typo"提交 ,但是下圖圈出來2個地方希望合併

 git rebase -i HEAD~2選定當前分支中包含HEAD(最新提交)在內的兩個最新歷史記錄爲對象

將 288745f 左側的 pick 部分刪除,改寫爲 fixup 。保存文件

 結果

 然後git checkout master,git merge --no-ff feature-C合併分支到master

裏面很多內容摘自《GitHub入門與實踐》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章