溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

git使用方法

發(fā)布時(shí)間:2021-01-22 10:25:49 來(lái)源:億速云 閱讀:148 作者:小新 欄目:軟件技術(shù)

這篇文章給大家分享的是有關(guān)git使用方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

Git是什么

官方話(huà):Git是一個(gè)免費(fèi)的開(kāi)源分布式版本控制系統(tǒng),旨在快速高效地處理從小型到大型項(xiàng)目的所有事務(wù)。

它能自動(dòng)幫我記錄每次文件的改動(dòng),還可以讓同事協(xié)作編輯,這樣就不用自己管理一堆類(lèi)似的文件了,也不需要把文件傳來(lái)傳去。如果想查看某次改動(dòng),只需要在軟件里瞄一眼就可以。

為什么要學(xué)習(xí)Git

面試要被問(wèn)。可以應(yīng)付面試。

很多公司開(kāi)發(fā)都用Git來(lái)處理項(xiàng)目。現(xiàn)在不學(xué),以后肯定還要學(xué)。

在我看來(lái)Git是現(xiàn)如今所有程序員都要掌握的,以后與同事共同開(kāi)發(fā)項(xiàng)目必定要用到的,熟練掌握Git命令,可以提高開(kāi)發(fā)的效率。

相關(guān)推薦:        
1.Git怎么用(圖文+視頻)
2.Git和Github的區(qū)別(圖文+視頻)

安裝Git

Windows

直接在官網(wǎng)上去下載。下載完成后,隨便在某個(gè)文件下右鍵如果有Git Bash Here就安裝成功。安裝后,還要在命令行輸入:

$git config --global user.name"你的名字"
$git config --global user.email"你的郵箱"

global表示全局,這臺(tái)機(jī)器所有的Git倉(cāng)庫(kù)都會(huì)使用這個(gè)配置。允許單個(gè)倉(cāng)庫(kù)使用其他的名字和郵箱。

Mac

Mac也可以像Windows一樣,按上面的步驟安裝。

也可以直接從AppStore安裝Xcode,Xcode集成了Git,不過(guò)默認(rèn)沒(méi)有安裝,你需要運(yùn)行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點(diǎn)“Install”就可以完成安裝了。

倉(cāng)庫(kù)

git使用方法

本地倉(cāng)庫(kù)是對(duì)于遠(yuǎn)程倉(cāng)庫(kù)而言的。本地倉(cāng)庫(kù) = 工作區(qū) + 版本區(qū)。

工作區(qū)即磁盤(pán)上的文件集合。

版本區(qū)(版本庫(kù))即.git文件。

版本庫(kù) = 暫存區(qū)(stage) + 分支(master) + 指針Head。

以我使用最頻繁的git命令為例,即提交到github為例。

git init 原本本地倉(cāng)庫(kù)只包含著工作區(qū),這是最常見(jiàn)的工作狀態(tài)。此時(shí),git init一下,表示在本地區(qū)域創(chuàng)建了一個(gè).git文件,版本區(qū)建立。

git add . 表示把工作區(qū)的所有文件全部提交到版本區(qū)里面的暫存區(qū)。

當(dāng)然你也可以通過(guò) git add ./xxx/ 一條一條分批添加到暫存區(qū)。

git commit -m "xxx" 把暫存區(qū)的所有文件提交到倉(cāng)庫(kù)區(qū),暫存區(qū)空空蕩蕩。

git remote add origin https://github.com/name/name_cangku.git 把本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)連接起來(lái)。

git push -u origin master 把倉(cāng)庫(kù)區(qū)的文件提交到遠(yuǎn)程倉(cāng)庫(kù)里。

一旦提交后,如果你又沒(méi)有對(duì)工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的。會(huì)有這樣的信息nothing to commit, working tree clean。

提交到GitHub

以前不熟悉git命令的時(shí)候,我提交項(xiàng)目到github上都是直接在網(wǎng)頁(yè)上直接拉取文件提交上去的。有點(diǎn)羞恥。

git使用方法

git init .初始化,表示把這個(gè)文件變成Git可以管理的倉(cāng)庫(kù)。初始化后打開(kāi)隱藏的文件可以看到有一個(gè).git文件。

git add .后面的一個(gè)點(diǎn)表示把這個(gè)文件全部提交到暫存區(qū)。

git add ./readme.md/ 表示把這個(gè)文件下面的readme.md文件提交到暫存區(qū)。

git commit -m "你要評(píng)論一點(diǎn)什么東西" git commit的意思是把暫存區(qū)的全部文件提交到本地倉(cāng)庫(kù)。-m后接評(píng)論。

git remote add origin https://github.com/name/name_cangku.git表示把你本地的倉(cāng)庫(kù)與GitHub上的遠(yuǎn)程倉(cāng)庫(kù)連接起來(lái)。只需要連接一次,以后提交的時(shí)候就可以不用謝這條命令了。name是你的github名字,name_cangku是你的倉(cāng)庫(kù)名。注意不要把后面的.git給漏掉了。因?yàn)槲仪懊婢褪沁@么走過(guò)來(lái)的,繞了很多彎路。至于如何在GitHub上新建倉(cāng)庫(kù),網(wǎng)上有很多教程,這里不再贅述了。

git push -u origin master 把本地倉(cāng)庫(kù)提交到遠(yuǎn)程倉(cāng)庫(kù)。(最后一步)在你的遠(yuǎn)程倉(cāng)庫(kù)上刷新一下就可以看到你提交的文件了。

最后提到的是,在git commit -m ""之前,可以重復(fù)git add到暫存區(qū)。但是git commit會(huì)把你之前存放在暫存區(qū)的全部文件一次性全部提交到本地倉(cāng)庫(kù)。

版本的回溯與前進(jìn)

提交一個(gè)文件,有時(shí)候我們會(huì)提交很多次,在提交歷史中,這樣就產(chǎn)生了不同的版本。每次提交,Git會(huì)把他們串成一條時(shí)間線(xiàn)。如何回溯到我們提交的上一個(gè)版本,用git reset --hard + 版本號(hào)即可。版本號(hào)可以用git log來(lái)查看,每一次的版本都會(huì)產(chǎn)生不一樣的版本號(hào)。

回溯之后,git log查看一下發(fā)現(xiàn)離我們最近的那個(gè)版本已經(jīng)不見(jiàn)了。但是我還想要前進(jìn)到最近的版本應(yīng)該如何?只要git reset --hard + 版本號(hào)就行。退一步來(lái)講,雖然我們可以通過(guò)git reset --hard + 版本號(hào),靠記住版本號(hào)來(lái)可以在不同的版本之間來(lái)回穿梭。

但是,有時(shí)候把版本號(hào)弄丟了怎么辦?git reflog幫你記錄了每一次的命令,這樣就可以找到版本號(hào)了,這樣你又可以通過(guò)git reset來(lái)版本穿梭了。

撤銷(xiāo)

場(chǎng)景1:在工作區(qū)時(shí),你修改了一個(gè)東西,你想撤銷(xiāo)修改,git checkout -- file。廖雪峰老師指出撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài),即用版本庫(kù)里的版本替換工作區(qū)的版本。

場(chǎng)景2:你修改了一個(gè)內(nèi)容,并且已經(jīng)git add到暫存區(qū)了。想撤銷(xiāo)怎么辦?回溯版本,git reset --hard + 版本號(hào),再git checkout -- file,替換工作區(qū)的版本。

場(chǎng)景3:你修改了一個(gè)內(nèi)容,并且已經(jīng)git commit到了master。跟場(chǎng)景2一樣,版本回溯,再進(jìn)行撤銷(xiāo)。

刪除

如果你git add一個(gè)文件到暫存區(qū),然后在工作區(qū)又把文件刪除了,Git會(huì)知道你刪除了文件。如果你要把版本庫(kù)里的文件刪除,git rm 并且git commit -m "xxx".

如果你誤刪了工作區(qū)的文件,怎么辦?使用撤銷(xiāo)命令,git checkout --就可以。這再次證明了撤銷(xiāo)命令其實(shí)就是用版本庫(kù)里的版本替換工作區(qū)的版本,無(wú)論工作區(qū)是修改還是刪除,都可以“一鍵還原”。

分支

分支,就像平行宇宙,你創(chuàng)建了一個(gè)屬于你自己的分支,別人看不到,還繼續(xù)在原來(lái)的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開(kāi)發(fā)完畢后,再一次性合并到原來(lái)的分支上,這樣,既安全,又不影響別人工作。用 Git 和 Github 提高效率的 10 個(gè)技巧!這篇也推薦看下。

創(chuàng)建與合并分支

git使用方法

在沒(méi)有其他分支插進(jìn)來(lái)時(shí),只有一個(gè)master主分支。每次你git push -u origin master 提交就是增加一條時(shí)間軸,master也會(huì)跟著移動(dòng)。

git使用方法

創(chuàng)建一個(gè)other的分支,通過(guò)other提交,雖然時(shí)間軸向前走了,但是主分支master還在原來(lái)的位置。

git使用方法

理論分析完,看一下命令怎么寫(xiě)。

創(chuàng)建分支other,切換到other分支。

gitbranch other
gitcheckout other

查看當(dāng)前所有分支

gitbranch
* othermaster

當(dāng)前的分支會(huì)有一個(gè)*

用other提交

gitadd ./xxx/
git commit -m"xxx"

other分支完成,切換回master

git checkoutmaster

此時(shí),master分支上并沒(méi)有other的文件,因?yàn)榉种н€沒(méi)有合并。

合并分支

gitmergeother

合并完成之后,就可以在master分支上查看到文件了。

刪除other分支

gitbranch -d other

我由此想到,在以后工作中,應(yīng)該是一個(gè)開(kāi)放小組共同開(kāi)發(fā)一個(gè)項(xiàng)目,組長(zhǎng)會(huì)創(chuàng)建很多分支,每一個(gè)分支可以交給一個(gè)人去開(kāi)發(fā)某一個(gè)功能,一個(gè)小組共同開(kāi)發(fā)而且不會(huì)相互干擾。誰(shuí)的功能完成了,可以由組長(zhǎng)合并一下完成了的分支。哦,完美!

解決合并分支問(wèn)題

git使用方法

假如有這樣一種情況,分支other已經(jīng)commit了,但是此時(shí)指針指回master時(shí),并且master沒(méi)有合并,而是git add / commit 提交了。這樣,就產(chǎn)生了沖突,主分支master文件內(nèi)容與other分支的內(nèi)容不一樣。合并不起來(lái)!所以,修改文件的內(nèi)容,讓其保持一致。

git add git commit 提交。

分支合并了。

git使用方法

git log --graph 查看分支合并圖

git branch -d other 刪除分支,任務(wù)結(jié)束。

分支管理策略

git merge --no-ff other 禁用Fast forward模式,因?yàn)槭褂肍ast forward模式,刪除分支后,分支歷史信息會(huì)丟失。超詳細(xì)的 Git 實(shí)戰(zhàn)教程,傻瓜一看也會(huì)!

BUG分支

工作中每個(gè)bug都可以通過(guò)一個(gè)新的臨時(shí)分支來(lái)修復(fù),修復(fù)后,合并分支,然后將臨時(shí)分支刪除。但如果你手上有分支在工作中,你的上級(jí)要你改另外的分支的BUG。

你要把現(xiàn)在正在工作的分支保存下來(lái),git stash,把當(dāng)前工作現(xiàn)場(chǎng)“存儲(chǔ)”起來(lái),等以后恢復(fù)后繼續(xù)工作。當(dāng)你解決BUG后,git checkout other回到自己的分支。用git stash list查看你剛剛“存放”起來(lái)的工作去哪里了。

此時(shí)你要恢復(fù)工作:

git stash apply恢復(fù)卻不刪除stash內(nèi)容,git stash drop刪除stash內(nèi)容。

git stash pop恢復(fù)的同時(shí)把stash內(nèi)容也刪了。

此時(shí),用git stash list查看,看不到任何stash 內(nèi)容。

總結(jié):修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除;當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場(chǎng)。

刪除分支

git branch -d + 分支有可能會(huì)刪除失敗,因?yàn)镚it會(huì)保護(hù)沒(méi)有被合并的分支。

git branch -D + 分支 強(qiáng)行刪除,丟棄沒(méi)被合并的分支。

多人協(xié)作

git remote 查看遠(yuǎn)程庫(kù)的信息,會(huì)顯示origin,遠(yuǎn)程倉(cāng)庫(kù)默認(rèn)名稱(chēng)為origin

git remote -v顯示更詳細(xì)的信息

git push -u origin master推送master分支到origin遠(yuǎn)程倉(cāng)庫(kù)。

git push -u origin other 推送other到origin遠(yuǎn)程倉(cāng)庫(kù)。

抓取分支

git使用方法

產(chǎn)生上圖的沖突時(shí),

git pull 把最新的提交從遠(yuǎn)程倉(cāng)庫(kù)中抓取下來(lái),在本地合并,解決沖突。在進(jìn)行g(shù)it pull

如果git pull 也失敗了,還要指定分支之間的鏈接,這一步Git會(huì)提醒你怎么做。然后再git pull。

多人協(xié)作的工作模式通常是這樣:

首先,可以試圖用git push origin

推送自己的修改;

如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并;

如果合并有沖突,則解決沖突,并在本地提交;

沒(méi)有沖突或者解決掉沖突后,再用git push origin

推送就能成功!

如果git pull提示no tracking information,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream-to origin/。

Rebase

git rebase 把分叉的提交歷史“整理”成一條直線(xiàn),看上去更直觀.缺點(diǎn)是本地的分叉提交已經(jīng)被修改過(guò)了。

最后在進(jìn)行g(shù)it push -u origin master

rebase的目的是使得我們?cè)诓榭礆v史提交的變化時(shí)更容易,因?yàn)榉植娴奶峤恍枰綄?duì)比。

標(biāo)簽管理

比如一個(gè)APP要上線(xiàn),通常在版本庫(kù)中打一個(gè)標(biāo)簽(tag),這樣,就確定了打標(biāo)簽的版本。將來(lái)無(wú)論什么時(shí)候,取某個(gè)標(biāo)簽的版本,就是把那個(gè)打標(biāo)簽的時(shí)刻的歷史版本取出來(lái)。所以,標(biāo)簽也是版本庫(kù)的一個(gè)快照。

Git的標(biāo)簽雖然是版本庫(kù)的快照,但其實(shí)它就是指向某個(gè)commit的指針。

tag其實(shí)就是一個(gè)讓人容易記住的有意義的名字,它跟某個(gè)commit綁在一起。比如tag v2.1就是把歷史上的一個(gè)版本的東西叫做v2.1

創(chuàng)建標(biāo)簽

步驟:

git branch查看當(dāng)前分支,git checkout master切換到master分支。

git tag <name> 打標(biāo)簽,默認(rèn)為HEAD。比如git tag v1.0

默認(rèn)標(biāo)簽是打在最新提交的commit上的。如果想要打標(biāo)簽在以前的commit上,要git log找到歷史提交的commit id.

如果一個(gè)commt id是du2n2d9,執(zhí)行g(shù)it tag v1.0 du2n2d9就把這個(gè)版本打上了v1.0的標(biāo)簽了。

git tag 查看所有標(biāo)簽,可以知道歷史版本的tag

標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的。

git show <tagname> 查看標(biāo)簽信息。

git tag -a <標(biāo)簽名> -m "<說(shuō)明>",創(chuàng)建帶說(shuō)明的標(biāo)簽。-a指定標(biāo)簽名,-m指定說(shuō)明文字。用show可以查看說(shuō)明。

操作標(biāo)簽

git tag -d v1.0 刪除標(biāo)簽。因?yàn)閯?chuàng)建的標(biāo)簽都只存儲(chǔ)在本地,不會(huì)自動(dòng)推送到遠(yuǎn)程。所以,打錯(cuò)的標(biāo)簽可以在本地安全刪除。

git push origin <tagname> 推送某個(gè)標(biāo)簽到遠(yuǎn)程

git push origin --tags 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽

如果標(biāo)簽推送到遠(yuǎn)程。git tag -d v1.0 先刪除本地標(biāo)簽v1.0。git push origin :refs/tags/v1.0刪除遠(yuǎn)程標(biāo)簽v1.0

自定義Git

git config --global color.ui true讓Git顯示顏色,會(huì)讓命令輸出看起來(lái)更醒目

忽略特殊文件 創(chuàng)建一個(gè).gitignore文件,把需要忽略的文件名填進(jìn)去。Git就會(huì)自動(dòng)忽略這些文件。我也在學(xué)習(xí)中遇到過(guò)這樣的問(wèn)題,比如node_modules文件就可以忽略。

忽略文件原則:忽略操作系統(tǒng)自動(dòng)生成的文件,比如縮略圖等;忽略編譯生成的中間文件、可執(zhí)行文件等,也就是如果一個(gè)文件是通過(guò)另一個(gè)文件自動(dòng)生成的,那自動(dòng)生成的文件就沒(méi)必要放進(jìn)版本庫(kù),比如Java編譯產(chǎn)生的.class文件;忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

強(qiáng)制提交已忽略的的文件。git add -f <file>

git check-ignore -v <file>檢查為什么Git會(huì)忽略該文件。

給Git命令配別名,這個(gè)有點(diǎn)騷,就是你以后想輸入git rebase時(shí),你給它一個(gè)“外號(hào)”,就叫它git nb。以后你可以通過(guò)git nb來(lái)代替git rebase。

常用Git命令總結(jié)

git config --global user.name "你的名字" 讓你全部的Git倉(cāng)庫(kù)綁定你的名字

git config --global user.email "你的郵箱" 讓你全部的Git倉(cāng)庫(kù)綁定你的郵箱

git init 初始化你的倉(cāng)庫(kù)

git add . 把工作區(qū)的文件全部提交到暫存區(qū)

git add ./<file>/ 把工作區(qū)的<file>文件提交到暫存區(qū)

git commit -m "xxx" 把暫存區(qū)的所有文件提交到倉(cāng)庫(kù)區(qū),暫存區(qū)空空蕩蕩

git remote add origin https://github.com/name/name_cangku.git 把本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)連接起來(lái)

git push -u origin master 把倉(cāng)庫(kù)區(qū)的主分支master提交到遠(yuǎn)程倉(cāng)庫(kù)里

git push -u origin <其他分支> 把其他分支提交到遠(yuǎn)程倉(cāng)庫(kù)

git status查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)

git diff 查看文件修改的具體內(nèi)容

git log 顯示從最近到最遠(yuǎn)的提交歷史

git clone + 倉(cāng)庫(kù)地址下載克隆文件

git reset --hard + 版本號(hào) 回溯版本,版本號(hào)在commit的時(shí)候與master跟隨在一起

git reflog 顯示命令歷史

git checkout -- <file> 撤銷(xiāo)命令,用版本庫(kù)里的文件替換掉工作區(qū)的文件。我覺(jué)得就像是Git世界的ctrl + z

git rm 刪除版本庫(kù)的文件

git branch 查看當(dāng)前所有分支

git branch <分支名字> 創(chuàng)建分支

git checkout <分支名字> 切換到分支

git merge <分支名字> 合并分支

git branch -d <分支名字> 刪除分支,有可能會(huì)刪除失敗,因?yàn)镚it會(huì)保護(hù)沒(méi)有被合并的分支

git branch -D + <分支名字> 強(qiáng)行刪除,丟棄沒(méi)被合并的分支

git log --graph 查看分支合并圖

git merge --no-ff <分支名字> 合并分支的時(shí)候禁用Fast forward模式,因?yàn)檫@個(gè)模式會(huì)丟失分支歷史信息

git stash 當(dāng)有其他任務(wù)插進(jìn)來(lái)時(shí),把當(dāng)前工作現(xiàn)場(chǎng)“存儲(chǔ)”起來(lái),以后恢復(fù)后繼續(xù)工作

git stash list 查看你剛剛“存放”起來(lái)的工作去哪里了

git stash apply 恢復(fù)卻不刪除stash內(nèi)容

git stash drop 刪除stash內(nèi)容

git stash pop 恢復(fù)的同時(shí)把stash內(nèi)容也刪了

git remote 查看遠(yuǎn)程庫(kù)的信息,會(huì)顯示origin,遠(yuǎn)程倉(cāng)庫(kù)默認(rèn)名稱(chēng)為origin

git remote -v 顯示更詳細(xì)的信息

git pull 把最新的提交從遠(yuǎn)程倉(cāng)庫(kù)中抓取下來(lái),在本地合并,和git push相反

git rebase 把分叉的提交歷史“整理”成一條直線(xiàn),看上去更直觀

git tag 查看所有標(biāo)簽,可以知道歷史版本的tag

git tag <name> 打標(biāo)簽,默認(rèn)為HEAD。比如git tag v1.0

git tag <tagName> <版本號(hào)> 把版本號(hào)打上標(biāo)簽,版本號(hào)就是commit時(shí),跟在旁邊的一串字母數(shù)字

git show <tagName> 查看標(biāo)簽信息

git tag -a <tagName> -m "<說(shuō)明>" 創(chuàng)建帶說(shuō)明的標(biāo)簽。-a指定標(biāo)簽名,-m指定說(shuō)明文字

git tag -d <tagName> 刪除標(biāo)簽

git push origin <tagname> 推送某個(gè)標(biāo)簽到遠(yuǎn)程

git push origin --tags 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽

git push origin :refs/tags/<tagname> 刪除遠(yuǎn)程標(biāo)簽<tagname>

git config --global color.ui true 讓Git顯示顏色,會(huì)讓命令輸出看起來(lái)更醒目

git add -f <file> 強(qiáng)制提交已忽略的的文件

git check-ignore -v <file> 檢查為什么Git會(huì)忽略該文件

gitbranch other

感謝各位的閱讀!關(guān)于“git使用方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI