1. 程式人生 > >常用的Git操作都在這裡了!

常用的Git操作都在這裡了!

git是程式設計師剛需工具;今天就來總結下git常用操作;

    一克隆專案

這裡我在GitHub上建立了一個示例庫

根據如下步驟我們就可以看到本地已經克隆一份出來了,進入目錄檢視就看到了

README.md檔案了

momodeMBP:~ momo$ git clone [email protected]:zhuifengxia/examplegit.git
Cloning into 'examplegit'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
momodeMBP:~ momo$ cd examplegit
momodeMBP:examplegit momo$ ls
README.md
momodeMBP:examplegit momo$

注:大家使用的時候,git庫地址換成自己的就可以了

    二管理修改

我們需要對專案新增檔案或者編輯檔案;之後如何提交到遠端庫呢?

現在我們來新增一個檔案gitexample.txt;檢視狀態;

momodeMBP:examplegit momo$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    gitexample.txt

nothing added to commit but untracked files present (use "git add" to track)
momodeMBP:examplegit momo$

上面的狀態告訴我們gitexample.txt檔案是新增的;

然後新增(到暫存區);

momodeMBP:examplegit momo$ git add gitexample.txt 
momodeMBP:examplegit momo$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   gitexample.txt

momodeMBP:examplegit momo$

然後提交:git commit -m 'new file gitexample' (提交併寫提交日誌)

momodeMBP:examplegit momo$ git commit -m 'new file gitexample'
[master 06951cb] new file gitexample
 1 file changed, 1 insertion(+)
 create mode 100644 gitexample.txt
momodeMBP:examplegit momo$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean
momodeMBP:examplegit momo$

然後提交到遠端庫;git push

momodeMBP:examplegit momo$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:zhuifengxia/examplegit.git
   2306378..06951cb  master -> master
momodeMBP:examplegit momo$

以上操作就是完成了新建一個檔案並提交到遠端庫,這樣其他人克隆專案也能看到這個檔案

如果是修改檔案,我們對某個檔案進行編輯;status 就是modified

momodeMBP:examplegit momo$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   gitexample.txt

no changes added to commit (use "git add" and/or "git commit -a")
momodeMBP:examplegit momo$

然後進行 add、commit;

因為是修改檔案,為了防止有其他人也更新了同一個檔案,我們先更新 git pull

更新完成之後再git push

當然如果你不執行更新操作,如果真的出現其他人更新同一個檔案,git也會提示你先git pull

撤銷修改:

1、命令git checkout -- gitexample.txt意思就是,把gitexample.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:

一種是gitexample.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是gitexample.txt已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。

總之,就是讓這個檔案回到最近一次git commitgit add時的狀態。

momodeMBP:examplegit momo$ cat gitexample.txt 
error--test changes

momodeMBP:examplegit momo$ git checkout -- gitexample.txt 
momodeMBP:examplegit momo$ cat gitexample.txt 
test changes

momodeMBP:examplegit momo$

用命令git reset HEAD gitexample.txt可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

momodeMBP:examplegit momo$ git reset gitexample.txt 
Unstaged changes after reset:
M   gitexample.txt
momodeMBP:examplegit momo$

也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

這時候暫存區就乾淨了;

    三版本回退

上面我們將瞭如何撤銷修改,現在講下如何進行版本回退

如果我們已經提交了commit;返回提交前的內容如下命令

momodeMBP:examplegit momo$ cat gitexample.txt 
error--test changes
momodeMBP:examplegit momo$ git reset --hard HEAD^
momodeMBP:examplegit momo$ cat gitexample.txt 
test changes
momodeMBP:examplegit momo$

注:首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

檢視提交歷史

momodeMBP:examplegit momo$ git log
commit 474cf1bd7c57b5b7a8eedf67d354f802edd17acd
Author: momo <[email protected]>
Date:   Wed Jul 19 09:55:27 2017 +0800
    edit file
commit 498234bde2c05ea24b5ead48ad2f3e8e88210b7b
Author: momo <[email protected]>
Date:   Wed Jul 19 09:54:30 2017 +0800
    new file

我們可以回退指定版本,找到指定版本的commit id 我們執行如下的時候不需要commit id錄入完,一部分就可以;

momodeMBP:examplegit momo$ git reset --hard 474cf1bd7c57b5b7a8eed

HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id
穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。
要重返未來,用git reflog檢視命令歷史,以便確定要回到未來的哪個版本。

    四刪除檔案

有時候需要把沒用的檔案刪掉;

momodeMBP:examplegit momo$ git rm gitexample.txt 
rm 'gitexample.txt'
momodeMBP:examplegit momo$ git commit -m "remove gitexample.txt"
[master e22ddc4] remove gitexample.txt
 1 file changed, 2 deletions(-)
 delete mode 100644 gitexample.txt
momodeMBP:examplegit momo$

現在,檔案就從版本庫中被刪除了。

也有可能出現誤刪的情況:還原

momodeMBP:examplegit momo$ git checkout -- gitexample.txt

git checkout其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

    五 建立合併分支

建立momo分支,然後切換到momo分支;

momodeMBP:examplegit momo$ git checkout -b momo
Switched to a new branch 'momo'
momodeMBP:examplegit momo$

git checkout命令加上-b引數表示建立並切換,相當於以下兩條命令:

momodeMBP:examplegit momo$ git branch momo
momodeMBP:examplegit momo$ git checkout momo
Switched to branch 'momo'

使用git branch 檢視當前分支:

momodeMBP:examplegit momo$ git branch
  master
* momo
momodeMBP:examplegit momo$

git branch命令會列出所有分支,當前分支前面會標一個*號。
我們在這個分支上進行操作新增檔案,並提交

momodeMBP:examplegit momo$ git commit -m 'branch'
[momo 89bf816] branch
 1 file changed, 1 insertion(+)
 create mode 100644 branch.txt
momodeMBP:examplegit momo$ ls
README.md   branch.txt
momodeMBP:examplegit momo$

現在切換到master分支上去;

momodeMBP:examplegit momo$ git checkout master
Switched to branch 'master'
momodeMBP:examplegit momo$ ls
README.md
momodeMBP:examplegit momo$

你會發現我們在momo分支上建的branch.txt檔案不見了!
現在我們把momo分支上內容合併到master分支上

momodeMBP:examplegit momo$ git merge momo
Updating e3c1f9c..89bf816
Fast-forward
 branch.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 branch.txt
momodeMBP:examplegit momo$ ls
README.md   branch.txt
momodeMBP:examplegit momo$

現在發現master分支上也有branch.txt檔案了;說明合併已經完成了;
我們可以把建立的分支刪除了;

momodeMBP:examplegit momo$ git branch -d momo
Deleted branch momo (was 89bf816).
momodeMBP:examplegit momo$ git branch
* master
momodeMBP:examplegit momo$

現在看到分支只剩下master了;

    六 檢視修改

檢視修改內容使用git diff ;

momodeMBP:examplegit momo$ git diff diff.txt 
diff --git a/diff.txt b/diff.txt
index e779424..3aba9ce 100644
--- a/diff.txt
+++ b/diff.txt
@@ -1 +1 @@
-diff
+changes-diff
momodeMBP:examplegit momo$

關於git的使用操作暫時寫到這裡了

相關推薦

常用Git操作這裡

git是程式設計師剛需工具;今天就來總結下git常用操作;     一克隆專案 這裡我在GitHub上建立了一個示例庫 根據如下步驟我們就可以看到本地已經克隆一份出來了,進入目錄檢視就看到了 README.md檔案了 momodeMBP:~ momo$ git 

應小姐姐要求,整理常用Git操作命令,她學會,你確定不收藏

前言 因為個人原因,轉化了部門之後已經很久沒有接觸過開發層級的東西了,好多東西基本都忘記了,但是新的部門有時候會用到相應的研發部的程式碼和文件手冊,所以耳邊就充斥這一句話 這個為什麼下載不了?這個為什麼打不開啊? 我的天吶,實在是受不了這樣的語言,今天,當小姐姐再一次找到我的時候(真的不是因為小姐姐的原因

關於HTML5,一位前端工程師推薦你應該讀的書這裡

對於剛接觸這項技術的小白來說,對HTML5還不能清晰的認識,想入門又不知道該從何處下手,本文將整理幾本關於HTML5的書籍,希望對大家有所幫助。 1、《Head First HTML5 Programming(中文版)》        

你以為Excel求和只有sum求和?多種高階求和方法這裡

求和,是Excel最基本的技能,但同時也是最高階的技能。這裡有的人會覺得求和不就是sum函式,或者Alt+嗎?實際的求和功能遠比這些要多得多,例如條件求和,多條件求和...今天就帶大家看一下Excel的多種求和方法,一起來看下吧! 合併單元格彙總求和對於合併單元格後的彙總求和我們如何操作呢?我們先選

Android 專案中用得最多最火的第三方框架可能這裡你有沒有錯過?

平時讀部落格搜 GitHub 多了,總會發現一些大家都在比較推崇的第三方框架,覺得非常不錯暫時又用不到,於是就打算把它們都收藏起來,需要用到的時候就不用到處問到處搜了。收藏得多了,本著熱愛分享擁抱開源的思想,於是貼出來給大家分享交流。如有紕漏,敬請拍磚指正。 歡迎眾收藏愛好

Java:那些關於集合的知識這裡

前言 在Java中,集合的使用可謂是重中之重 本文將獻上一份 全面 & 詳細的Java集合學習攻略,希望您們會喜歡。  目錄   1. 簡介    2. 與陣列的區別 Java集合 與

嘔心瀝血整理C語言指標大全,這裡

前言 相信大多數的同學都是第一門能接觸到語言是C/C++,其中的指標也是比較讓人頭疼的部分了,因為光是指標都能專門出一本叫《C和指標》的書籍,足見指標的強大。但如果不慎誤用指標,這些指標很大可能就會像惡魔一樣把你的程式給直接搞崩潰。 3個月前,我編寫了一份這些指標都是惡魔嗎?.c的檔

關於雜湊的一切,這裡

# 前言 > 本文收錄於專輯:[http://dwz.win/HjK](http://dwz.win/HjK),點選解鎖更多資料結構與演算法的知識。 你好,我是彤哥。 上一節,我們一起學習了,在Java中如何構建高效能佇列,裡面牽涉到很多底層的知識,不知道你有Get到多少呢?! 本節,我想跟著大

不知不覺間成職場老鳥,四年多的經驗總結在這裡

大家好,又到週末了,今天跟大家聊一聊職場。 說起程式設計師的職場,大家第一感覺就是很難混,競爭壓力大,也就是卷。然後呢還有35歲危機,工作強度也不小,各種996。而且還有各種各樣大大小小的套路和坑,說起來一把辛酸淚,打工人的確不容易。所以我寫這篇文章呢,就是想要分享一下這幾年我總結出的幾點心得,給那些正在職場

今天Java Web老師布置的作業,突然想起來,差點忘記

一個 ref .com ces 解釋 分解 rational http 編程 問題一:什麽是RUP?(參考位置:百度百科以及各大網址) 答:RUP全稱是Rational Unified Process,也就是統一軟件開發過程,統一軟件開發過程是一個面向對象且基於網絡的程序開

常用Git操作

lam checkout 分支合並 -c revert 設置 -m 重置 git pull --------------------git--------------------1、簡介1、Git是一款免費、開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。[

自從學會線上PDF轉PPT,PPT模板庫滿

PPT作為工作必備的演示文件,每一位職場人都或多或少地掌握一點製作方法。不過這其中有一些隱藏的技巧是十分熟練的老司機才懂得如何解決的。比如PPT的模板,許多職場新人都是從各類的專業網站下載PPT格式模板,並不會留意那些以PDF格式存在的PPT範本,而老司機則不會放過這些機會,這些冷門的模板更會在公開場

新入職程式設計師:看別人一個方法7000行程式碼,看得我頭

在寫程式碼,文件方面,程式設計師最喜歡且最常做的是不寫文件,不寫程式碼註釋,最不願意看到就是:別人不寫文件,別人不寫程式碼註釋,這幾乎是所有程式設計師的一個狀態吧。遇到無文件,無註釋,無人可問的程式碼,對於一個程式設計師來說是比較崩潰的,對麼?想必有部分程式設計師朋友可能會遇到這樣尷尬的場景,不過比

redis安裝,細緻的我看的

redis安裝     1.  redis下載    2. redis的安裝 redis的安裝環境會安裝到linux系統中。 第一步:安裝VMware,並且在VMware中安裝centos系統(參考linux教程)

常用git操作小結

在協作辦公時,經常會通過GitHub,所以git顯的尤為重要 建立倉庫 git init, 建立一個空的本地倉庫 git clone,可以克隆別人的專案到本地 git init 和 git clone都會在資料夾下建立一個.git檔案,該檔案用來儲存歷

ITIL 4 升級大揭祕,你關心的問題

ITIL 4 升級大揭祕,你關心的問題都全了! ITIL 升級大揭祕 ITIL is thinking about the future… It consists of a renewed focus on: The core principles of quality serv

運維再不學習,可能你連蹲機房的機會沒有

去年運維領域最熱門的是“DevOps”,而今年隨著各個行業都在喊AI(人工智慧)的背景下,“智慧運維”似乎成了新趨勢,連自動化運維都已經不那麼時髦了。 之前運維派整理過一份運維頭銜大全,羅列了30多個運維領域的崗位,其中最明顯的變化就是各個企業對“運維開發”這個職位的需求多起來了,同樣對運維人員的技

老人偷偷給女兒20萬,兒媳帶兒子回家鬧,看完信全家安靜

李老頭今年65歲,兒子女兒都已經成家,想要接他去城裡享福,他卻一直拒絕,兒子女兒也是孝順,每年都會回來看看老人,帶點東西,不過村裡人看在眼裡,女兒回來就提大包小包,兒子兒媳回來確實順走李老頭女兒留下的東西,再帶點土雞蛋走。 可李老頭也不說什麼,李老頭女兒長得漂亮,工作也好,還嫁到了城裡,兒

程式設計師的煩惱,反正我

今天我們就來談談程式設計師的四大煩惱,如果你是程式設計師,你又佔了哪幾條呢?   第一條:荒誕的需求 不得不說程式設計師的天敵就是無盡的需求,最恐怖的事情莫過於當你開發完的時候,客戶給你提出新的需求,這個時候真是想XXXX(此處省略100W個字)  

看過的史上最詳細手把手教會你完成一個目標識別(目標分割)專案

隨著工業自動化的推進,可能越來越多的同學會感受到老闆接的專案都是傳統工廠自動化程序中的一些環節,比如目標識別。一般有傳統影象方法和順應時代的神經網路方法。其中傳統方法對設計者的影象處理能力要求很高,並且針對每一個專案必須設計特定的識別檢測方法。現在(2018年3月)已經有很多