再次學習下廖老師的git教程

工作中又遇到了git操作問題,又去瀏覽了下廖雪峯老師的git教程,這邊只是簡單做個筆記,廖老師的教程寫的非常好。當然對git的熟悉還需要工作中來鍛鍊。

廖雪峯git教程

  • 基礎操作本地git版本庫
1.	本地初始化git倉庫:
Git init (會在指定文件目錄下生成一個.git的本地版本git倉庫)

2.	添加文件到暫存區:
Git add :
# 添加指定文件到暫存區,可指定多個文件
$ git add [file1] [dir/file2] ...
 
# 添加指定文件到暫存區,可指定通配符;如 *.txt,匹配所有txt文件
$ git add [file-pattern]
 
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
 
# 添加當前目錄的所有文件到暫存區(後面跟個點號)
$ git add .

3.	提交暫存區文件到本地版本庫
Git commit
# 提交暫存區所有文件到倉庫區,一定要記得添加提交信息(message)
$ git commit -m [message]
 
# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]
 
# 提交工作區自上次commit之後的變化,直接到倉庫區 (省略 git add 那一步)
$ git commit -a 
 
# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]
 
# 重做上一次commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
  • 版本回退
1.	快照(commit)
每次提交到版本庫中git會自動的生成一個叫作“commit”的快照

2.	查看提交歷史記錄
Git log (顯示從最近到最遠的提交日誌)
簡易版顯示:git log --pretty=oneline
會看到顯示一個十六進制的被稱爲commit id
要想回退那麼:Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100^比較容易數不過來,所以寫成HEAD~1003.	回退之前歷史版本
Git reset
Git reset –hard HEAD^

4.	再從操作3後回到最新的版本上面
這裏需要找到之前的最新版本的commit id
Git reset –hard xxxx (commit id的前幾位)

5.	回退原理:
Git的版本回退速度非常快,因爲Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向其他版本,然後順便把工作區的文件更新了。所以你讓HEAD指向哪個版本號,你就把當前版本定位在哪。

在這裏插入圖片描述
在這裏插入圖片描述

 - 查看每次提交的commit id
Git reflog
  • 工作區和暫存區
    Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。
1.	工作區
就是你在電腦裏能看到的目錄。

在這裏插入圖片描述

 - 版本庫
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

在這裏插入圖片描述
其中版本庫中最重要的就是“暫存區”和“分支”
在這裏插入圖片描述
查看工作區文件的修改狀態:
Git status
在這裏插入圖片描述
會顯示哪些文件被修改了,哪些文件是新增的即未跟蹤。

  • 管理修改
    Git跟蹤並管理的是修改,而非文件。每次修改,如果不用git add到暫存區,那就不會加入到commit中。

  • 撤銷修改
    在這裏插入圖片描述

 - 放棄工作區的修改(修改不存在):
命令 git restore 文件名可以放棄工作區的修改
還可以使用git checkout – 文件名 撤銷工作區的修改,這裏有2種情況
①	 “文件“修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態。
②	“文件“已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

 - 將添加到暫存區的文件回退到工作區(修改依然存在)
Git reset HEAD 文件名
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本
  • 刪除文件
 - 刪除一個未add或未commit的文件
這種並不存在在暫存區和本地版本庫的文件隨便刪

 - 刪除一個已commit到本地版本庫中的文件
手動刪除,這樣會導致工作區和版本庫不一致,接下來需要執行命令git rm 文件名,然後git commit -m “提交信息”,這樣版本庫與工作區也就一致了。

 - 刪除一個已存在版本庫中文件,但是發現刪除錯了,需要恢復
Git checkout – 誤刪文件名
其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
  • 關聯遠程庫
    一般遠程庫名稱默認爲origin,會創建默認主分支master
 - 本地已初始好了版本庫關聯遠程庫
git remote add origin git@server-name:path/repo-name.git

在這裏插入圖片描述

 - 關聯後,第一次推送(本地庫初始化也會默認創建master)
Git push -u origin master
此後推送即git push origin master
  • 克隆遠程庫
    要克隆一個倉庫,首先必須知道倉庫的地址,然後使用git clone命令克隆。
    Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。
    使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令。

  • 創建與合併分支

 - 查看當前分支 (列出所有分支,當前分支前會顯示*星號)
Git branch 

 - 切換分支
Git checkout 分支名

 - 創建分支並切換到當前分支
Git checkout -b 分支名

 - 合併分支
Git merge (合併指定分支到當前分支)

 - 刪除分支
Git branch -d 分支名

 - 新版本git切換分支switch
6.1	git switch -c 分支名 (創建分支並切換到新建分支上)
6.2	git switch 已存在分支名 
  • 分支策略
    通常,合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
    如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
    使用git merge –no-ff -m “合併信息” 要合併的分支名。

  • 貯藏
    Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作,類似與sourcetree中的貯藏功能,按我的理解就是將當前工作區所修改的文件全部保存起來,然後恢復工作區至修改之前。

1.	貯藏
Git stash

2.	查看貯藏
Git stash list

3.	恢復貯藏不刪除
Git stash apply 貯藏名 (若刪除需手動刪除git stash drop 貯藏名)

4.	恢復貯藏同時刪除
Git stash pop

在master分支上修復的bug,想要合併到當前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“複製”到當前分支,避免重複勞動。

如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。
  • 多人協作
 - 查看遠程庫信息
Git remote 或 git remote -v

 - 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;

 - 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

 - 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;

 - 從遠程抓取分支,使用git pull,如果有衝突,要先處理衝突。
  • Rebase
    rebase操作可以把本地未push的分叉提交歷史整理成直線;
    rebase的目的是使得我們在查看歷史提交的變化時更容易,因爲分叉的提交需要三方對比。

  • 標籤
    發佈一個版本時,我們通常先在版本庫中打一個標籤(tag),這樣,就唯一確定了打標籤時刻的版本。將來無論什麼時候,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。所以,標籤也是版本庫的一個快照。

1.	查看所有標籤
Git tag

2.	打標籤,切換到需要打的分支上
Git tag 標籤名

3.	默認是打在最新的commit上,跨時間後,需要先找到commitId
Git log –pretty=online –abbrev-commit
Git tag 標籤名 commitid

4.	標籤非時間排序,按字母排序,查看標籤詳情
Git show 標籤名

5.	創建帶詳情的標籤
Git tag -a 標籤名 -m 說明信息

6.	刪除本地標籤
Git tag -d 標籤名

7.	推送本地標籤至遠程
Git push origin 標籤名

8.	推送全部未推送過得本地標籤
Git push origin –tags

9.	刪除一個遠程標籤
Git push origin :refs/tags/標籤名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章