Git 使用

?Git操作

一、創(chuàng)建git倉庫

git init --bare fasloan.git

授權(quán)限

chown -R git:git fasloan.git ????

遠程庫克隆

git clone git@X.X.X.X:/home/yd_fasloan/fasloan.git

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

(分支管理:你創(chuàng)建了一個屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。其他版本控制系統(tǒng)如SVN等都有分支管理,但是用過之后你會發(fā)現(xiàn),這些版本控制系統(tǒng)創(chuàng)建和切換分支比蝸牛還慢,簡直讓人無法忍受,結(jié)果分支功能成了擺設(shè),大家都不去用。但Git的分支是與眾不同的,無論創(chuàng)建、切換和刪除分支,Git在1秒鐘之內(nèi)就能完成!無論你的版本庫是1個文件還是1萬個文件。)

1.創(chuàng)建dev分支,然后切換到dev分支:

$ git checkout -b dev

創(chuàng)建分支并切換

git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當于以下兩條命令:

$ git branch dev

$ git checkout dev

Switchedto branch'dev'

2.?用git branch命令查看當前分支:

$ git branch? ? ? ? ? ? ? ? ? ?

* dev? ? ? ? ? ? ? ?

master

git branch命令會列出所有分支,當前分支前面會標一個*號。

查看當前分支

在dev分支上正常提交,比如對fasloan_view.py 做個修改,刪除一行:print111然后提交:

3. 先查看當前狀態(tài):

當前狀態(tài)

表示修改了fasloan_view.py的文件內(nèi)容,現(xiàn)在提交一下將文件加入暫存區(qū):

添加暫存區(qū)

對剛提交的文件進行描述,實際上是把暫存區(qū)的所有內(nèi)容提交到當前分支:

描述修改

簡單解釋一下git commit命令,-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。查看現(xiàn)在的狀態(tài),該工作區(qū)是干凈的沒有任務(wù)去提交:

當前狀態(tài)

現(xiàn)在,dev分支的工作完成,我們就可以切換回master分支:

切換分支

查看fasloan_view.py文件,發(fā)現(xiàn)剛才刪除那行仍然存在:

1.查看fasloan_view.py文件

查看文件內(nèi)容

2.內(nèi)容未修改:

未改動內(nèi)容

解決辦法:

因為那個提交實在dev分支上,而master分支此刻提交點并沒有變。我們把dev分支上的工作修改合并到master分支上:

合并分支

git merge命令用于合并指定分支到當前分支。合并后,再查看fasloan_view.py的內(nèi)容,就可以看到,和dev分支的最新提交是完全一樣的。

修改文件內(nèi)容

現(xiàn)在將所有改動都合并到主分支了,用git log看看分支歷史:

查看分支歷史

在實際開發(fā)中,我們應(yīng)該按照幾個基本原則進行分支管理:

(首先,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不能在上面干活;

那在哪干活呢?干活都在dev 分支上,也就是說,dev 分支是不穩(wěn)定的,到某個時候,比如1.0版本發(fā)布時,再把dev分支合并到master上,在master分支發(fā)布1.0版本;你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。)

合并分支時,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來曾經(jīng)做過合并,而fast forward合并就看不出來曾經(jīng)做過合并。

?因為本次合并要創(chuàng)建一個新的commit,所以加上-m參數(shù),把commit描述寫進去。

$ git merge --no-ff? -m "merge with no-ff " dev

$ git log--graph --pretty=oneline --abbrev-commit

三、查看遠程庫的信息用git remote::

遠程庫信息

或者,用git remote -v顯示更詳細的信息:

遠程庫信息

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權(quán)限,就看不到push的地址。

四、推送分支

1.推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應(yīng)的遠程分支上

推送分支

并不是一定要把本地分支往遠程推送

master分支是主分支,因此要時刻與遠程同步;

dev分支是開發(fā)分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;

2. 多人協(xié)作工作模式:

(1)使用git push origin ?<分支名> 推送自己的修改

(2)如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并

(3)]如果和并有沖突,則解決沖突,并在本地提交

(4)沒有沖突或者解決掉沖突后,再用git push origin <分支名>就能推送成功

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

五、解決沖突:

新分支開發(fā)feature1:

創(chuàng)建新分支

修改fasloan_view.py,添加了一行print(11)

添加一行內(nèi)容

提交:

提交到當前分支

在master分支上把fasloan_view.py文件修改添加print(1111), 文件已被修改:

添加一行

添加文件到暫存區(qū)并提交:

添加到當前分支

這種情況git無法執(zhí)行快速合并,只能試圖把各自的修改合并起來,但這種合并可能會有沖突:

合并分支

Git告訴我們,fasloan_view.py文件存在沖突,必須手動解決沖突后再提交。git status也可以告訴我們沖突的文件:

沖突文件內(nèi)容

修改內(nèi)容之后保存,再提交:

修改提交文件

刪除feature1分支:

刪除分支

最后推到遠程:

同步到遠程庫

六、版本回退

Git每當文件修改到一定程度的時候,就可以“保存”一個快照,這個快照在Git里被稱為commit,一旦把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復(fù),繼續(xù)工作。

git log命令顯示從最近到最遠的提交日志,如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù):

提交日志

看到一大串類似7feo2的是commit id(版本號), 一個通過SHA1計算出來的非常大的數(shù)字,用十六進制表示。

回到上個版本,首先Git要知道當前版本是哪個,在Git中,用HEAD表示當前版本,也就是最新。上個版本HEAD^,上上個版本時HEAD^^, 當然網(wǎng)上100個版本,寫成HEAD~100.

回退上一個版本:

回退版本

已被還原:

還原版本

若想再回去,只要命令行窗口還沒有被關(guān)掉,可以順著找commit id,于是就可以回到未來的某個版本,版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了:

回到指定版本

你回退到了某個版本,關(guān)掉了電腦,第二天早上就后悔了,想恢復(fù)到新版本,Git提供了一個命令git reflog用來記錄你的每一次命令:

查看記錄

又找回了你想回到指定版本的commit id。

七、撤銷修改:

git checkout -- file可以丟棄工作區(qū)的修改:把文件在工作區(qū)的修改全部撤銷有兩種情況:

(1)文件自修改后還沒有被放到暫存區(qū),現(xiàn)在撤銷修改就回到和版本庫一模一樣的狀態(tài)。

(2)文件已經(jīng)添加到暫存區(qū),又做了修改,現(xiàn)在撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。總之,就是讓文件回到最近一次git commit或者git add時的狀態(tài)。

修改文件并添加到了暫存區(qū),慶幸的是在commit之前,用git status查看,修改到了暫存區(qū),還沒有提交;

用命令git reset HEAD fasloan_view.py可以把暫存區(qū)的修改撤銷掉,重新放回工作區(qū)。假設(shè)不但改錯東西,還從暫存區(qū)提交到了版本庫,就只能回到上一個版本(條件是還沒把本地版本庫推送到遠程)

總結(jié):

(1)當你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file。

(2)當你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD ,就回到了場景1,第二步按場景1操作。

(3)已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,只能回退版本,不過前提是沒有推送到遠程庫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (預(yù)警:因為詳細,所以行文有些長,新手邊看邊操作效果出乎你的預(yù)料) 一:Git是什么? Git是目前世界上最先進的...
    axiaochao閱讀 2,007評論 1 8
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學習之用 Git簡介 Git是什么? Git是目前世界上最先...
    橫渡閱讀 4,127評論 3 27
  • 一、電腦本地初始化一個倉庫 1. git init: 初始化一個電腦上本地倉庫 終端進入項目目錄,輸入: 該命令將...
    dragon_li閱讀 3,130評論 1 4
  • git 使用筆記 git原理: 文件(blob)對象,樹(tree)對象,提交(commit)對象 tree對象 ...
    神刀閱讀 3,849評論 0 10
  • ――2017·7月·桂林水災(zāi)有感 呯,呯,呯 從地底而來的聲音, 有許許多多的溪流, 組...
    零方程閱讀 341評論 2 2

友情鏈接更多精彩內(nèi)容