GIT的基本命令

2022-01-03 天空的代碼世界

零、背景

雖然我多年前就使用 github了,但一直局限於簡單的命令,什麼分支合併刻意的去學過、用過,但是早已忘記了。  

最近準備把手上的新項目從 SVN 上遷移到 Git 上,這裡需要對 Git 做一下簡單、全面、初級的了解,算是理論篇,也可以當做手冊來使用。

以後的日子裡,在具體使用 Git 的過程中,我也會介紹一些實踐操作,比如 svn 遷移 git、git 如何管理項目、git 如何合併分支等。  

另外 Git 官網有完善的文檔,也提供了一本教程書籍《Pro Git》。

如果你經常使用 Git 的話建議下載讀一讀,對各種操作心中有個初步印象,至少知道有什麼功能,不至於實際使用中遇到問題手忙腳亂的。

文末也會提供了電子書的下載方式,有興趣的可以找來讀讀。

一、什麼是Git

Git 是 Linus Torvalds 開發的一個原始碼版本控制軟體。  

是的,就是那個大名鼎鼎的 Linus,linux 作業系統系統內核就是他實現的。  

其實Linus Torvalds自己實現這個版本控制軟體也是被逼的。因為之前他們使用的版本控制軟體是BitKeeper,2005年BitKeeper不讓 linux 內核社區免費使用這個軟體了,Linus Torvalds一怒之下自己實現了一個。

版本控制的好處有兩個。

對於過去,所有文件的變更都有記錄,從而使得所有的操作可以追溯,甚至回到某個歷史的狀態。  

對於未來,可以多人分工合作實現不同的功能,最終測試通過了可以合併到一起,從而做到社區維護一個項目。

常見的版本控制軟體有CVS、SVN(Apache Subversion)、BitKeeper、Git。  

我只用過 Git 和 SVN,所以這裡簡單對比一下這兩個版本控制軟體吧。 

二、Git vs SVN

1.模式

Git 是分布式的,SVN 是中心式的。  

分布式的好處是我們可以本地提交代碼,而中心式的必須連接中心伺服器才能提交代碼。  

當然,由於 Git 功能多了,使用起來也很複雜,而 SVN 實現就簡單粗暴,操作相當簡單。  

2. 目錄管理

SVN 中,一個項目可以看到很多目錄:branches、document、release、tags、trunk。

而在 Git 中,一個項目只需要一個 document 和 src 即可。

  

也就是說 SVN 中通過不斷的 copy 出 branches、release、tags來進行版本管理,而 Git 的代碼只有一份,通過隱藏的某些技術來進行版本管理。  

3.分支管理

SVN 中每個分支都會把項目的所有代碼複製到 branches 裡面起一個新的名字(比如發一次版本時名字上加上版本號後綴)

 而git則會通過技術手段,創建一個虛擬的變更節點樹來管理代碼。一個分支就是一個指針,指向某個樹節點。

如下圖,灰色代表具體的提交記錄,我們稱為樹的節點;紅色代表分支指針;棕黃色是主幹指針。

具體來說,這個圖有兩個分支,master是主幹分支,testing是測試分支。  

4.tag & release

上面提到 SVN 通過 copy 實現管理,所以對於 tag 和 release 都需要分別 copy 一份所有的代碼放在一個新的目錄裡。

而對於 Git,只需要對樹節點增加一個有含義的別名,就可以通過這個名字快速找到這個階段的項目代碼。  

比較常見的操作時每次發布的時候,打一個版本 tag,比如v1.2.3。有了 tag,git 中就不需要 release 目錄了。  

5. 合併代碼

svn合併代碼非常痛苦。

而git內部有一個變更樹,合併代碼相當簡單。  

三、安裝配置

對於 windows 可以去 github 下載:

地址:https://git-for-windows.github.io 

而對於 linux,則可以直接命令行安裝:

命令:sudo apt-get install git

顯示配置列表:

git config -l

配置用戶名和郵箱:

git config --global user.name "name"

git config --global user.email "email"

設置顏色高亮:

git config --global color.ui true

註:Git 用戶的配置文件位於 ~/.gitconfig

四、基本操作

SVN 的倉庫比較簡單,只有工作倉庫與遠程倉庫。

而 Git 則有四個類型的倉庫:

1. 工作區(Workspace)

2. 暫存區(staing/index)

3. 本地倉庫(Repository)

4. 遠程倉庫(Remote)  

基本操作如下:

拉遠程倉庫代碼:git clone url

添加文件(工作區=》暫存區):git add . 

刪除文件(工作區=》暫存區):git rm file

重命名文件(工作區=》暫存區):git mv fromFIle toFile

提交到本地倉庫(暫存區=》本地):git commit -m "變更理由"

推動到遠程倉庫(本地=》遠程):git push origin master

拉取遠程倉庫內容(遠程=》ALL):git pull origin master

查看本地狀態:git status 

對於一個新項目,如果在git託管網站上創建好了的話,直接拉下來修改即可。

git clone url

cd leetcode-solutions

touch README.md

git add README.md

git commit -m "add README"

git push -u origin master

如果本地已經有對應的目錄了,可以先創建項目,然後推送到遠程。

cd leetcode-solutions

git init

git remote add origin url

git add .

git commit

git push -u origin master

五、分支

列出本地分支:git branch

列出遠程分支:git branch -r

列出本地和遠程分支:git branch -a

新增分支(head停留在當前分支):git branch newBranchName

新增分支(head切換到新分支):git checkout -b newBranchName

切換到分支:git checkout newBranchName

tips:切換分支前,如果工作區或暫存區有修改沒有提交,會發生衝突而切換失敗。

刪除分支:git branch -d oldBranchName

刪除遠程分支:git push origin :oldBranchName

刪除遠程分支:git push origin -d  oldBranchName

合併分支(生成新分支,形成一個環):git merge master

追加合併分支(旁路分支刪除):git rebase master

七、高級操作

如果多人並行開發,往往涉及到拉取其他人的代碼,或者推送給其他人。  

添加其他人的倉庫:git remote add remoteName url

拉取所有分支的變化:git fetch

獲取其他人的遠程倉庫:git fetch remoteName

推送到其他人的遠程倉庫:git push remoteName branchName

完整推送命令:git push origin(倉庫名)  master (本地分支名):master(遠程分支名)

比較差異:git diff

取消commit操作:git commit –amend

註:fetch 和 pull的區別是pull會將拉取的數據合併到當前分支,fetch 僅僅拉取數據不合併。

注2:origin含義為clone時的默認remoteName 

查看基本操作記錄:git log

查看具體操作記錄:git reflog

查看具體修改內容:git show commitID

查看某人提交內容:git log --author=someone 

指定某次提交為head:git reset commitID

回滾修改的文件:git checkout -- files

八、最後

其實這篇文章主要是記錄 Git 的操作命令,只能當做一個簡單的命令手冊。  

具體操作還是需要邊查手冊邊練習。  

git官網有豐富的文檔,還出了一本書,叫做《Pro Git》,可以找來瀏覽一下。  

在公眾號裡回復"Pro Git"可以獲得《Pro Git》電子書

參考資料:

https://git-scm.com/doc

本文首發於公眾號:天空的代碼世界,微信號:tiankonguse-code。

我是誰:

我是天空,這裡有計算機技術、理財、讀書、電影、以及一個程式設計師的生活。謝謝你的關注、讚賞、留言、轉發、點讚、閱讀。  

推薦閱讀:

讀《美麗新世界》

騰訊的競爭力與組織架構

《小狗錢錢》讀書筆記

一齣好戲是部好電影

說三個事情

緩存的兩個概念與一個技術

讀《韭菜的自我修養》

❖ 點讚、留言、分享朋友圈  ❖

❖都是對筆者的一種支持  ❖

相關焦點

  • Git基本命令大全
    如果以下最基本的git命令都不懂,那麼可以轉行了。1、git clone -b <指定分支名> <遠程倉庫地址>克隆指定分支如:git clone -b bestore_master ssh://git@git-ssh.xxx.com/xxx.git
  • 常用的12個Git基本命令
    好在常用的Git命令只有幾個,並且參數都比較簡單,因此,我們會很容易地跨越這個障礙。而剛開始就直接使用GUI工具並不是我們推薦的方式,因為使用GUI不僅效率慢,還會使得你根本不了解Git本身的工作機制,一旦出現問題你將不能手動進行解決。因此,要使用GUI也要建立在能夠熟悉Git基本命令的前提下。
  • Git命令大全
    Android Studio 的 git插件 用起來很溜(當然還有其他一些工具),它們的本質都是git命令的UI化封裝。git blame 文件查看誰什麼時間改了哪些文件。git log顯示從最近到最遠的提交日誌,包括每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明等基本信息。
  • Git命令詳解與提交規範
    先來看下Git的基本組成:Workspace工作區,平時進行開發改動的地方,是當前看到最新的內容。Staged/Index暫存區,當執行 git add 的命令後,工作區的文件就會被移入暫存區,暫存區標記了當前工作區中哪些內容是被 Git 管理的,當完成某個需求或者功能後需要提交代碼,第一步就是通過 git add 先提交到暫存區。
  • Git 常用命令及使用
    Git 常用命令使用1)、本地庫初始化 git init2)、設置籤名作用:區分不同開發人員的身份。說明:這裡設置的籤名和登錄遠程庫(代碼託管中心)的帳戶沒有關係。a)、項目級別籤名:git config user.name [AAA]git config user.email [郵箱地址]籤名信息位置:cat .git/configb)、系統級別籤名:git config --globaluser.name [AAA]git config --global user.email
  • Git實戰演練,常用命令總結
    branch:其他分支,我們可以把master分支上的代碼拷貝一份,重新命名為其他分支名work space:就是我們的工作區,使用git  status就可以看到工作區的內容有無變動responsitory:倉庫,我們將代碼寫好之後先add,在commit,就提交到我們的本地倉庫中。
  • Git命令的用法小結
    git命令的基本數據流Git架構倉庫一個git倉庫包含工作目錄,與.git目錄。也可以通過命令行設置,如$ git config --global user.email 郵箱機制$ git config --global user.name 用戶名幫助(help)有多種方式獲取git的整體幫助,或者某個命令的幫助。
  • Python 命令行之旅:使用 docopt 實現 git 命令
    按照慣例,我們要像使用 argparse 一樣使用 docopt 來實現 git 命令。為了讓沒讀過 使用 argparse 實現 git 命令 的小夥伴也能讀明白本文,我們仍會對 git 常用命令和 gitpython 做一個簡單介紹。本系列文章默認使用 Python 3 作為解釋器進行講解。
  • Git新手使用命令集合-初級
    但是,一般情況下,在項目開發過程中,如果是基本某些webapp類的開發時,使用node的頻率相當的高,比如前端比較流行的三大框架:react、vue、react native等,那使用node或是命令行操作也是比較常見的,當然再往後說,如果您己經進入IT行業裡好些年了,如果不會那麼一些大招(命令行操作)來號領三軍,是不是也會顯示自己的水平很「low」逼呢!
  • 幾個常用的 Git 高級命令
    高級命令.htmlGit 是一款開源優秀的版本管理工具,它最初由 Linus Torvalds 等人開發,用於管理 Linux Kernel 的版本研發。相關的書籍和教程網上琳琅滿目,它們多數都詳細的介紹其基本的使用和命令。本人根據自己的經驗,整理出幾個較為高級而常用的命令。推薦資料 Git Book。https://git-scm.com/book/en/v2Git blameGit blame 可以查詢每一行代碼的 commit ID、提交者和提交日期。
  • 常用Git 命令清單
    Workspace:工作區Index / Stage:暫存區Repository:倉庫區(或本地倉庫)Remote:遠程倉庫01git基本操作# 克隆$ gitclone [url]# 添加$ git add ./# 提交$ git commit -m 「提交」# 上傳$ git push# 下拉更新$ git pull02配置和查看信息# 顯示當前的Git配置$ git config --list# 編輯Git配置文件
  • 最近從 0 學習Git,詳細分類總結了這份 Git 命令寶典
    雖然之前學過 Git,不過用的比較少,很多原理也不是很清楚,所以最近是買了個視頻,靜下心來從零學習了下 Git,不過 Git 用來用去其實也就那幾個命令,今天這篇文章,我把那些命令都分類總結了一下(當然,是參考別人的分類的),這些總結大部分來自於我買的一個 Git 滑鼠墊,主要是為了以後自己忘記了方便查找。相信這份 Git 寶典,一定值得你收藏。
  • Git常用命令總結
    git log --stat: show diffstat of changes introduced at each commit.     同樣是用來看改動的相對信息的,--stat比-p的輸出更簡單一些.
  • Git: 聊聊Rebase命令
    先切換會origin分支,通過pull指令將origjn分支上的最新改動拉取下來。然後在用git checkout mywork切換會mywork分支,到這裡就能用git rebase orgin來進行變基了。
  • git在項目中的常用命令
    其中.git文件夾中包含了兩個部分,一個是暫存區(Index或者Stage),顧名思義就是暫時存放文件的地方,通常使用add命令將工作區的文件添加到暫存區裡;本地倉庫:.git文件夾裡還包括git自動創建的master分支,並且將HEAD指針指向master分支。
  • git命令使用詳解~建議收藏
    你的郵箱地址1.2.2. GGit文檔忽略機制 工作目錄中有一些文件是不希望接受Git 管理的,譬如程序編譯時生成的中間文件等等。Git 提供了文檔忽略機制,可以將工作目錄中不希望接受Git 管理的文檔信息寫到同一目錄下的.gitignore 文件中。
  • git基本用法和log查看
    git的基本操作首先在目錄下面新建一個文件test.txt查看文件git st,看到test.txt文件。在那個分支,commit狀態等。然後git add ./git ci -m '注釋'已經提交並且生成了標識,這個後面再講。
  • 【Git】Git-常用命令備忘錄(三)
    #小明童鞋,克隆git clone xxx.git#小明童鞋,創建了dev分支git switch -c devgit add .git commit -m "c"git add xxx.gogit commit -m "update xxx.go"git add App.vuegit commit -m "update App.vue"#大明童鞋,克隆git clone xxx.gitgit add main.jsgit push
  • Git分支原理命令圖文解析
    現在,讓我們看看與git分支有關的操作命令: 1、git branch [option] [name] 如果不使用任何參數,它可以用來查看所有的分支,而在分支名前有*標記的則為主分支,如果加上name為創建新分支,,如git branch child,則會創建一個名為child的分支,此外,它有一些常用的參數:
  • 一學就會的git命令
    導讀使用git 已不知好幾年,最近想著把常用的一些git 命令做個總結,本文主要寫的是git常用的命令。幾個常用的命令mkdir folder_name  // 創建文件夾 [folder_name: 文件夾名稱,舉個慄子:git-demo]cd  folder_name    // 進入文件夾touch file_name    // 創建一個文件 [file_name: