1. 程式人生 > >深入理解git 使用

深入理解git 使用

作為一個4年的程式設計師,很多基礎一知半解,很慚愧.想來想去,自己後知後覺,到畢業一段時間,才知道這個行業比較適合我.

首先是clone 一個專案

  • git clone
git clone git@xxxxxxxxxxxx.git

這裡寫圖片描述

  • git status

然後修改檔案 index.md git 馬上會發現和之前提交到git的檔案差異(命令 git status)
這裡寫圖片描述

  • git diff
    此時想看詳細的差異內容(命令 git diff)
    這裡寫圖片描述

  • git add
    然後提交差異的內容到 git 暫存區 git add . 或者檔案 index.md
    這裡寫圖片描述
    再次git status 檢視,差異的內容變成綠色了,這時候,再次使用命令 git diff ,什麼也不顯示,但是用
    git diff – staged 顯示了剛剛修改的內容

因此,git diff 比較的是本地修改和暫存的區差異(如果沒有暫存內容,就和已經提交的內容比較)
git diff –staged 比較的是 暫存區的內容和 已經提交的內容

如果此時發現 不需要這個修改,需要將暫存區的內容,恢復,就用(命令 git reset )
這裡寫圖片描述
再次用git status 發現index.md 依然變成紅色,變成了本地修改
PS: 如果有多個修改檔案進入了暫存區,只想回撤一個檔案的修改,那麼可以使用

git reset HEAD <file>...
  • git rm && git mv
    在git 中刪除檔案和移動檔案 git rm index.md 或者 git mv index.md indexbk.md 和linux 差不多

  • git log
    關於 git log 教程中有很多引數,但是我之喜歡用 git log 不帶引數, 或者乾脆 直接gitk 圖形化介面,直接看commit 記錄

  • git checkout
    如果本地修改了檔案,但是改亂了,現在想恢復到初始狀態,就需要用 (當你使用 git status 會提示你)

git checkout <file>   或者 git checkout .
  • git branch
    如果使用 git branch -a
    這裡寫圖片描述
    可以看出 遠端伺服器是origin ,他的head 指向 遠端倉庫 master 分支,而本地分支是master,(使用git branch 就可以知道)

  • git remote
    使用git remote -v 就可以知道遠端分支的fetch 和 push 地址
    這裡寫圖片描述

  • git fetch [remote-name]
    如果想在提交程式碼前更新本地的程式碼,可以使用git fetch origin ,但是更新,並不會把合併到本地的程式碼,需要手動合併
    但是 git merge 是合併操作
    git fetch + git merge = git pull
    這裡還有一篇寫的不錯 https://blog.csdn.net/qq_36113598/article/details/78906882

  • git push [remote-name] [branch-name]
    commit 後,可以通過 git push origin master 將本地master 分支提交到 origin 倉庫

  • git remote show [remote-name]
    這裡寫圖片描述
    檢視遠端倉庫資訊,可以看到 fetch 和 push 地址, head 分支是master 並且 track 遠端master 分支,已經更新到最新

  • 分支建立

git branch  <branch-name> 
git checkout -b <branch-name> //建立分支,並且切換過去
git checkout <branch-name> //切換分支
  • git merge
    合併 a 分支到 master 分支
git checkout master  //首先切換到 master 分支
git merge a  //最後,合併a 分支到master 分支 

上面是沒有衝突的情況
但是一旦出現衝突,例子中,就需要手動解決 ==== 分割線上面和下面有衝突

<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
 please contact us at [email protected]
</div>
>>>>>>> iss53:index.html
  • 跟蹤遠端分支
git checkout -b [branch] [remotename]/[branch] 
git checkout --track origin/master
git branch -u origin/master
git branch -vv

可以知道多有分支跟蹤遠端分支的情況

  • git rebase
git checkout a
git rebase master //git rebase 到目的分支 ,但是此時 head 在a 分支
git checkout master //head 在master 分支
git merge a//a 合併到 master ,此時master 分支在最前面
  • git format-patch
git format-patch -1 <commit id>  單獨commit 的patch
git format-patch <commit id> 不包含當前commit 以來的提交分別生成patch
git format-patch <commit id1>..<commit idn> commit id 之間的patch 分別列出來

這裡寫圖片描述

  • git apply
git apply --check 0001-xxxx-fix.patch //檢查能否正確應用patch
git apply 0001-xxxx-fix.patch //應用patch
  • git cherry-pick
    如果不想變基即 rebase,那麼就用cherry-pick,
    特性分支中的某個提交,或者特性分支中只有一個提交,而你不想執行變基時很有用
    可以將某特性分支的某一個commit 應用到當前分支,建立的時間點,不一樣
git cherry-pick e43a6fd3e94888d76779ad79fb568ed180e5fcdf
  • git show
使用 git show <commit id> 

檢視某一commit id 的內容

還有很多git 高階用法,在android 原始碼開發的時候會遇到 比如
HEAD:refs/for/mybranch和refs/heads/mybranch 區別

相關推薦

深入理解Git (三) - 微命令上篇

由於 obj 為什麽 info 進入 ng- net t對象 upd 1 git hash-object 曾經講過Git用Hash值作為Git對象的名字,那麽詳細是哪個命令呢? 我們能夠先改動一個文件: echo "hongchangf

深入理解Git (一) - 元數據

實現原理 popu 使用 hudson prepare init 事情 鉤子函數 desc 三分鐘教你學Git僅僅是教我們會用Git了,但是內部的一些實現原理假設我們也知道一些的話會使我們使用起來更加順手。這個系列就是在你用了Git一段時間之後,並想繼續到Git的內

使用plumbing命令來深入理解git add和git commit的工作原理

clean 結果 write 文件的 repos 倉庫 head 根據 acc 前言: plumbing命令 和 porcelain命令 git中的命令分為plumbing命令和porcelain命令: porcelain命令就是我們常用的git add,git comm

深入理解Git的實現原理

原文地址:https://www.cnblogs.com/mamingqian/p/9711975.html 0、導讀   本文適合對git有過接觸,但知其然不知其所以然的小夥伴,也適合想要學習git的初學者,通過這篇文章,能讓大家對git有豁然開朗的感覺。在寫作過程中,我力求

Git 學習】深入理解git reset 命令

重置命令(git reset)是Git 最常用的命令之一,也是最危險最容易誤用的命令。來看看git reset命令用法。 ---------------------------------------------------------------------------------------------

深入理解Git (六)

Git在儲存資料的時候,儲存的都是完整的物件,並不是差異,叫做鬆散物件Loose Object,有時候你只改變了一點,但是同時會擁有近乎兩倍大小的blob物件。 這樣子做豈不是很不節省磁碟?所以Gi

深入理解git 使用

作為一個4年的程式設計師,很多基礎一知半解,很慚愧.想來想去,自己後知後覺,到畢業一段時間,才知道這個行業比較適合我. 首先是clone 一個專案 git clone git clone [email protected] git s

深入理解和實踐git merge.md

1.git merge的簡單理解 看下git merge的命令: git merge hotfix 例如當前的分支是master,那麼這條命令的意思就是,將hofix分支的的修改同步到master分支。 2. git merge 的兩種實質操作過程 2.1 結果為“快

深入理解學習Git工作流,看了就懂了。

個人在學習git工作流的過程中,從原有的 SVN 模式很難完全理解git的協作模式,直到有一天我看到了下面的文章,好多遺留在心中的困惑迎刃而解,於是我將這部分資料進行整理放到了github上,歡迎star檢視最新更新內容, https://github.com/xirong/my-git

(轉存 作者未知)深入理解HTML協議

期望 intern 屬於 公告欄 機制 被拒 定向 圖片 工具欄 深入理解HTML協議 http協議學 習系列 1. 基礎概念篇 1.1 介紹 HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World

深入理解hostname

network 配置文件 release linux 知識點 當我覺得對Linux系統下修改hostname已經非常熟悉的時候,今天碰到了幾個個問題,這幾個問題給我好好上了一課,很多知識點,當你覺得你已經掌握的時候,其實你了解的還只是皮毛。技術活,切勿淺嘗則止!實驗環境:Red Hat E

javascript深入理解js閉包

bag 思考 2個 表達式 proto window對象 來看 連接 第一次 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應用都要依靠閉包實現。 一、變量的作用域 要理解閉包,首先必須理解Javascript特殊的變量作用域。

JSON 的深入理解

jos 數據轉換 不同 宋體 ges 分隔 blog 結構 集合 JSON 知識 JSON(JavaScript Object Notataion)javascript的對象表示形式,但是目前已經發展為一種輕量級的數據交互格式。 特點:完全獨立於語言的文本格式,跨平臺,有結

深入理解 CSS3 彈性盒布局模型

分辨率 top 應用 時間 控制 用戶 lock fire 應用開發 彈性盒布局模型(Flexible Box Layout)是 CSS3 規範中提出的一種新的布局方式。該布局模型的目的是提供一種更加高效的方式來對容器中的條目進行布局、對齊和分配空間。這種布局

深入理解javascript之設計模式

rip 是我 解決問題 不想 接受 button move center 常識 設計模式 設計模式是命名、抽象和識別對可重用的面向對象設計實用的的通用設計結構。設計模式確定類和他們的實體、他們的角色和協作、還有他們的責任分配。 每個設計模式都聚焦於一個面向對象的設計難題

(轉)final關鍵字的深入理解

多線程 body error app nds ann this tar order 轉自http://www.importnew.com/7553.html Java中的final關鍵字非常重要,它可以應用於類、方法以及變量。這篇文章中我將帶你看看什麽是final關鍵字?將

深入理解計算機系統-作業2.10

oid 位置 pla borde 作業2 nbsp body 開始 width 1 void inplace_swap(int *x, int *y){ 2 *y = *x ^ *y;/*step1*/ 3 *x = *x ^ *y;/*step2*/ 4

深入理解Activity啟動流程(二)–Activity啟動相關類的類圖

b- ive ava ani affinity server 組織 詳細 pac 本文原創作者:Cloud Chou. 歡迎轉載,請註明出處和本文鏈接 本系列博客將詳細闡述Activity的啟動流程,這些博客基於Cm 10.1源碼研究。 在介紹Activity的詳細啟動流程

深入理解HTTP協議

不想 session 位與 裏的 ec2 只需要 空間 html文檔 動態 1. 基礎概念篇 1.1 介紹 HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World Wide Web Consortiu

深入理解Java虛擬機- 學習筆記 - 虛擬機類加載機制

支持 pub eth 獲取 事件 必須 string 沒有 字節碼 虛擬機把描述類的數據從Class文件加載道內存,並對數據進行校驗,轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。在Java裏,類型的加載、連接和初始化過程都是在程序