Git學習記錄 基本命令篇

2022-06-12 20:33:10 字數 3871 閱讀 7469

1.git commit

git 倉庫中的提交記錄儲存的是你的目錄下所有檔案的快照,就像是把整個目錄複製,然後再貼上一樣,但比複製貼上優雅許多!

git 希望提交記錄盡可能地輕量,因此在你每次進行提交時,它並不會盲目地複製整個目錄。條件允許的情況下,它會將當前版本與倉庫中的上乙個版本進行對比,並把所有的差異打包到一起作為乙個提交記錄。

git 還儲存了提交的歷史記錄。這也是為什麼大多數提交記錄的上面都有父節點的原因 —— 我們會在圖示中用箭頭來表示這種關係。對於專案組的成員來說,維護提交歷史對大家都有好處。

關於提交記錄太深入的東西咱們就不再繼續**了,現在你可以把提交記錄看作是專案的快照。提交記錄非常輕量,可以快速地在這些提交記錄之間切換!

咱們來實際操作一下,看看提交記錄是怎樣的。下面展示了乙個(小型)git**庫。當前有兩個提交記錄 —— 初始提交c0和其後可能包含某些有用修改的提交c1。

使用以下命令建立乙個新的提交記錄。

好了!非常棒!我們剛才修改了**庫,並把這些修改儲存成了乙個提交記錄 c2。c2 的父節點是 c1,父節點是當前提交中變更的基礎。

2.git branch

git 的分支也非常輕量。它們只是簡單地指向某個提交紀錄 —— 僅此而已。所以許多 git 愛好者傳頌:

早建分支!多用分支!

這是因為即使建立再多分的支也不會造成儲存或記憶體上的開銷,並且按邏輯分解工作到不同的分支要比維護那些特別臃腫的分支簡單多了。

在將分支和提交記錄結合起來後,我們會看到兩者如何協作。現在只要記住使用分支其實就相當於在說:「我想基於這個提交以及它所有的父提交進行新的工作。」

咱們通過實際操作來看看分支是什麼樣子的。

接下來,我們將要建立乙個名為 newimage 的分支。

看到了嗎,建立分支就是這麼容易!新建立的分支 newimage 指向的是提交記錄 c1。

現在咱們試著往新分支裡提交一些東西。

使用下面的命令

哎呀!為什麼 master 分支前進了,但 newimage 分支還待在原地呢?!這是因為我們沒有「在」這個新分支上,看到 master 分支上的那個星號(*)了嗎?這表示當前所在的分支是 master。

現在咱們告訴 git 我們想要切換到新的分支上

git checkout

下面的命令會讓我們在提交修改之前先切換到新的分支上

然後再進行提交

這就對了!我們的修改已經儲存到新的分支裡了。

對了,有個更簡潔的方式:如果你想建立乙個新的分支同時切換到新建立的分支的話,可以通過 git checkout -b 來實現。

3.git merge

太好了! 我們已經知道如何提交以及如何使用分支了。接下來咱們看看如何將兩個分支合併到一起。就是說我們新建乙個分支,在其上開發某個新功能,開發完成後再合併回主線。

咱們先來看一下第一種方法 —— git merge。在 git 中合併兩個分支時會產生乙個特殊的提交記錄,它有兩個父節點。翻譯成自然語言相當於:「我要把這兩個父節點本身及它們所有的祖先都包含進來。」

通過圖示更容易理解一些。

我們準備了兩個分支,每個分支上各有乙個獨有的提交。這意味著沒有乙個分支包含了我們修改的所有內容。咱們通過合併這兩個分支來解決這個問題。

我們要把 bugfix 合併到 master 裡

哇哦!看見了嗎?首先,master 現在指向了乙個擁有兩個父節點的提交記錄。假如從 master 開始沿著箭頭向上看,在到達起點的路上會經過所有的提交記錄。這意味著 master 包含了對**庫的所有修改。

還有,看見各個提交記錄的顏色變化了嗎?為了幫助學習理解,我引入了顏色搭配。每個分支都有不同的顏色,而每個提交記錄的顏色是所有包含該提交記錄的分支的顏色混合之後的顏色。

所以,master 分支的顏色被混入到所有的提交記錄,但 bugfix 沒有。下面咱們讓它也改變一下顏色。

咱們再把 master 分支合併到 bugfix:

$ git checkout bugfix

$ git merge master

因為 master 繼承自 bugfix,git 什麼都不用做,只是簡單地把 bugfix 移動到 master 所指向的那個提交記錄。

現在所有提交記錄的顏色都一樣了,這表明每乙個分支都包含了**庫的所有修改!大功告成!

4.git rebase

第二種合併分支的方法是 git rebase。rebase 實際上就是取出一系列的提交記錄,「複製」它們,然後在另外乙個地方逐個的放下去。

rebase 的優勢就是可以創造更線性的提交歷史,這聽上去有些難以理解。如果只允許使用 rebase 的話,**庫的提交歷史將會變得異常清晰。

咱們還是實際操作一下吧……

還是準備了兩個分支;注意當前所在的分支是 bugfix(星號標識的是當前分支)

我們想要把 bugfix 分支裡的工作直接移到 master 分支上。移動以後會使得兩個分支的功能看起來像是按順序開發,但實際上它們是並行開發的。

咱們這次用 git rebase 實現此目標

$ git rebase master

怎麼樣?!現在 bugfix 分支上的工作在 master 的最頂端,同時我們也得到了乙個更線性的提交序列。

注意,提交記錄 c3 依然存在(樹上那個半透明的節點),而 c3' 是我們 rebase 到 master 分支上的 c3 的副本。

現在唯一的問題就是 master 還沒有更新,下面咱們就來更新它吧……

現在我們切換到了 master 上。把它 rebase 到 bugfix 分支上……

git rebase bugfix

好了!由於 bugfix 繼承自 master,所以 git 只是簡單的把 master 分支的引用向前移動了一下而已。

git學習 基本命令

git學習命令記錄 git config global user.name your name 設定您的名稱 git config global user.email email example.com 設定您的郵箱 建立乙個版本庫 mkdir learngit 建立乙個learngit的空目錄 c...

git 的基本命令學習

sudo apt get install gitgit config global user.name git config global user.email 上邊是新增你的名字和郵箱,檢視你的配置資訊git config list git clonecd be touch readme.test...

git 基本命令

man git man git commit man git pull man git merge git config global user.name yourname git config global user.email yourname example.com cd home git m...