1. 程式人生 > >Git的奇技淫巧—關於Git,搞懂這篇文章就夠了!

Git的奇技淫巧—關於Git,搞懂這篇文章就夠了!

Git是一個“分散式版本管理工具”,簡單的理解版本管理工具:大家在寫東西的時候都用過“回撤”這個功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用“回撤”是找不回來的。而“版本管理工具”能記錄每次的修改,只要提交到版本倉庫,你就可以找到之前任何時刻的狀態(文字狀態)。

下面的內容就是列舉了常用的git命令和一些小技巧,可以通過"頁面內查詢"的方式進行快速查詢:Ctrl/Command+f

開卷必讀

如果之前未使用過Git,可以學習廖老師的免費Git教程入門

  1. 一定要先測試命令的效果後,再用於工作環境中,以防造成不能彌補的後果!到時候別拿著砍刀來找我

  2. 所有的命令都在git version 2.7.4 (Apple Git-66)下測試通過

  3. 統一概念:

    • 工作區:改動(增刪檔案和內容)

    • 暫存區:輸入命令:git add 改動的檔名,此次改動就放到了‘暫存區’

    • 本地倉庫(簡稱:本地):輸入命令:git commit 此次修改的描述,此次改動就放到了’本地倉庫’,每個commit,我叫它為一個‘版本’。

    • 遠端倉庫(簡稱:遠端):輸入命令:git push 遠端倉庫,此次改動就放到了‘遠端倉庫’(github等)

    • commit-id:輸出命令:git log

      ,最上面那行commit xxxxxx,後面的字串就是commit-id

  4. 如果喜歡這個專案,歡迎Star、提交Pr、反饋問題

目錄

展示幫助資訊

git help -g

回到遠端倉庫的狀態

拋棄本地倉庫的所有版本(commit),回到遠端倉庫的狀態。

git fetch --all && git reset --hard origin/master

重設第一個commit

也就是把所有的改動都重新放回工作區,並清空所有的commit,這樣就可以重新提交第一個commit了

git update-ref -d HEAD

展示工作區和暫存區的不同

輸出工作區暫存區的different(不同)。

git diff

還可以展示本地倉庫中任意兩個commit之間的檔案變動:

git diff <commit-id> <commit-id>

展示暫存區和最近版本的不同

輸出暫存區和本地最近的版本(commit)的different(不同)。

git diff --cached

展示暫存區、工作區和最近版本的不同

輸出工作區暫存區 和本地最近的版本(commit)的different(不同)。

git diff HEAD

快速切換分支

git checkout -

刪除已經合併到master的分支

git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d

展示所有的分支關聯的遠端倉庫

git branch -vv

關聯遠端分支

關聯之後,git branch -vv就可以展示關聯的遠端分支名了,同時推送到遠端倉庫直接:git push,不需要指定遠端倉庫了。

git branch -u origin/mybranch

或者在push時加上-u引數

git push origin/mybranch -u

刪除本地分支

git branch -d <local-branchname>

刪除遠端分支

git push origin --delete <remote-branchname>

或者

git push origin :<remote-branchname>

檢視標籤

git tag

展示當前分支的最近的tag

git describe --tags --abbrev=0

本地建立標籤

git tag <version-number>

預設tag是打在最近的一次commit上,如果需要指定commit打tag:

$ git tag -a <version-number> -m "v1.0 釋出(描述)" <commit-id>

推送標籤到遠端倉庫

首先要保證本地建立好了標籤才可以推送標籤到遠端倉庫:

git push origin <local-version-number>

一次性推送所有標籤,同步到遠端倉庫:

git push origin --tags

刪除本地標籤

git tag -d <tag-name>

刪除遠端標籤

刪除遠端標籤需要先刪除本地標籤,再執行下面的命令

git push origin :refs/tags/<tag-name>

放棄工作區的修改

git checkout <file-name>

放棄所有修改:

git checkout .

回到某一個commit的狀態,並重新增添一個commit

git revert <commit-id>

回到某個commit的狀態,並刪除後面的commit

和revert的區別:reset命令會抹去某個commit id之後的所有commit

git reset <commit-id>

修改上一個commit的描述

git commit --amend

檢視commit歷史

git log

檢視某段程式碼是誰寫的

blame的意思為‘責怪’,你懂的。

git blame <file-name>

顯示本地執行過git命令

就像shell的history一樣

git reflog

修改作者名

git commit --amend --author='Author Name <[email protected]>'

修改遠端倉庫的url

git remote set-url origin <URL>

列出所有遠端倉庫

git remote

列出本地和遠端分支

-a引數相當於:all

git branch -a

列出遠端分支

-r引數相當於:remote

git branch -r

檢視兩個星期內的改動

git whatchanged --since='2 weeks ago'

把A分支的某一個commit,放到B分支上

這個過程需要cherry-pick命令,參考

git checkout <branch-name> && git cherry-pick <commit-id>

給git命令起別名

簡化命令

git config --global alias.<handle> <command>

比如:git status 改成 git st,這樣可以簡化命令 git config --global alias.st status

儲存當前的修改,但不用提交commit

git stash

儲存當前狀態,包括untracked的檔案

untracked檔案:新建的檔案

git stash -u

展示所有stashes

git stash list

回到某個stash的狀態

git stash apply <[email protected]{n}>

回到最後一個stash的狀態,並刪除這個stash

git stash pop

刪除所有的stash

git stash clear

從stash中拿出某個檔案的修改

git checkout <[email protected]{n}> -- <file-path>

展示所有tracked的檔案

git ls-files -t

展示所有untracked的檔案

            
           

相關推薦

Git—關於Git文章

Git是一個“分散式版本管理工具”,簡單的理解版本管理工具:大家在寫東西的時候都用過“回撤”這個功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用“回撤”是找不回來的。而“版本管

大資料文章

網際網路時代的到來,各種專業詞彙術語充斥著我們的大腦,大資料,人工智慧更是當下時代的熱點潮流,很多傳統企業都徘徊穿梭於這個潮流當中,傳統廣告的褪去,移動網際網路時代的大資料精準整合營銷變得越來越重要!   很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線

超強彙總:學習Python列表只需文章

千里之行,始於足下。要練成一雙洞悉一切的眼睛,還是得先把基本功紮紮實實地學好。今天,本喵帶大家仔細溫習一下Python的列表。溫故而知新,不亦說乎。 當然,溫習的同時也要發散思考,因為有些看似無關緊要的、約定俗成的語言習慣,例如陣列索引為何從0開始,其背後可能大有來歷。知

Java程式設計師想要高薪看完文章

Java作為一門程式語言,在各類程式語言中作為弄潮兒始終排在前三的位置,這充分肯定了java語言的魅力,在實際專案應用中,我們已經無法脫離java,它的高效能,穩定性,擴充套件性已經深入到每一個java程式設計工程師的骨髓裡。 然而要想成為一名合格的java工程師並不容易。因為作為一名Ja

時間管理文章

hhhh,好像有點標題黨的味道。今天分享一下時間管理的技能,時間管理不論是在讀書的時候,還是在工作的時候,都特別重要。我一直覺得Life=Time. 之前接觸過時間管理,走了很多彎路,自己也讀過什麼《高效能人士的七個臭毛病》這樣的書,後來實際上發現沒啥用,自己

關於第三方支付文章

更多 ets 二維 new 效能 一段時間 .aspx 銀行業務 多行 萬字長文為您介紹第三方支付:起源、發展與趨勢 隨著移動支付的快速發展,第三方支付已經深度融入到生活中,如果生活在一二線城市,從吃飯、購物、看電影、菜市場買菜到搭公交地鐵,你能想到的消費場景,基本都可以用

多執行緒必考的「生產者 - 消費者」模型看齊姐文章

生產者 - 消費者模型 Producer-consumer problem 是一個非常經典的多執行緒併發協作的模型,在分散式系統裡非常常見。也是面試中無論中美大廠都非常愛考的一個問題,對應屆生問的要少一些,但是對於有工作經驗的工程師來說,非常愛考。 這個問題有非常多的版本和解決方式,在本文我重點是和大家壹齊理

HCIE學習和考試如何規劃、安排文章(雖然很骨感)

學習和備考HCIE 乾頤堂hcieHCIE之路分享下 備考HCIE 心酸之路去年三月份一個人踏上魔都奮鬥之路,之前在武漢 一直做華三的產品。 武漢準備考HCIE 一直等到來上海 ,去QYT 報了名,琉兒給我辦理好了一切。本以為會按照很順利的節奏參加軍哥的課程,從NA 開始學習。可是,生活總是不如人願。 從四月

java工程師linux命令文章

sep 實戰 reads href 改變 sig 腳本 喜歡 這樣的 精彩內容推薦 一套java架構師學習資源,等你拿 你所需要的大數據視頻教程 微服務資源springboot、springcloud、docker、dubbo項目實戰等傾心分享 shell簡介

瞭解 HTTPS文章

今天接到個活兒,讓我科普 HTTPS 。講 HTTP 我都“方”,想要通俗易懂的說完 HTTPS, 我有點“圓”。在講什麼是 HTTPS 之前,我們先來看個漫畫。 △ 圖片來源於阮一峰的網路日誌   漫畫中其實就是 HTTPS 的握手過程,但是我相信大段的英文你看著也不怎麼流暢,下面

AI晶片的過去和未來文章

  文章釋出於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。       轉自:矽谷密探   相信你一定還記得擊敗了李世石和柯潔的谷歌“阿爾

微信小程式完整開發文章

微信使用的開發語言和檔案很「特殊」。 小程式所使用的程式檔案型別大致分為以下幾種: ①WXML(WeiXin Mark Language,微信標記語言) ②WXSS(WeiXin Style

有C/C++/Java基礎的學習Python一文章

我在學校裡學習的是C、C++、C#,實習的時候公司裡用的都是Java,於是又自學了java。用我領導的一句話說,“C++轉Java幾天時間就夠了”。最近在學習深度學習演算法和自然語言處理的時候,很多演算法都是用python寫的,於是又下定決定學習了python。

徹底理解分散式Netty文章

一、Netty到底是什麼 1、從HTTP說起 有了Netty,你可以實現自己的HTTP伺服器、FTP伺服器、UDP伺服器、RPC伺服器、WebSocket伺服器、Redis的Proxy伺服器、MySQL的Proxy伺服器等等。 我們回顧一下傳統的HTTP伺服器的原理

iOS下:StoryBoard怎麼用文章

兩篇文章都是一個老外寫的 cocoachina翻譯了part1:http://www.cocoachina.com/industry/20131213/7537.html    可能需要翻牆才能看得到 3. storyBoard+AutoLayout 是蘋果推行的東西,

不知道Java類檔案結構的同學文章

  一、前言   程式碼編譯的結果從本地機器碼轉變為位元組碼,是儲存格式發展的一小步,卻是程式語言發展的一大步。經過多年的發展,目前的計算機仍然只能識別0和1,但是由於近10年內虛擬機器以及大量建立在虛擬機器之上的程式語言如雨後春筍般出現並蓬勃發展,將我們編寫的程式編譯成二進位制本地機器碼(Native Co

spring boot入門文章

一、SpringBoot入門 1、基本介紹 簡化Spring應用開發的一個框架、整個Spring技術棧的一個大整合;

真的Kafka 入門一文章

初識 Kafka 什麼是 Kafka Kafka 是由 Linkedin 公司開發的,它是一個分散式的,支援多分割槽、多副本,基於 Zookeeper 的分散式訊息流平臺,它同時也是一款開源的基於釋出訂閱模式的訊息引擎系統。 Kafka 的基本術語 訊息:Kafka 中的資料單元被稱為訊息,也被稱為記錄,

Xamarin.Forms佈局應該

  Xamarin.Forms 佈局介紹   什麼是佈局?可以簡單的理解為,我們通過將佈局元素有效的組織起來,讓螢幕變成我們想要的樣子!   我們通過畫圖的方式來描述一下Xamarin.Forms的佈局。     小節錨點:

鄉村醫生需要什麽張圖

有關 我們 這不 部分 年輕 block 今後 p s 焦慮 鄉村醫生需要什麽,看這張圖就夠了! 筆者最近在重慶市人民政府公開信箱中看到了一位赤腳醫生寫給政府的公開信,因讀後無比感動,索性就摘錄了出來: 來信內容: 我們是70-80年代的赤腳醫生,是計劃生育的執行人