www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]git的產(chǎn)生背景 很多人都知道,Linus在1991年創(chuàng)建了開源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。Linus雖然創(chuàng)建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為L(zhǎng)inux編寫代碼,那Linux的代碼是如何管理


git的產(chǎn)生背景


10分鐘帶你入門git到github

很多人都知道,Linus在1991年創(chuàng)建了開源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。Linus雖然創(chuàng)建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為L(zhǎng)inux編寫代碼,那Linux的代碼是如何管理的呢?事實(shí)是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼!你也許會(huì)想,為什么Linus不把Linux代碼放到版本控制系統(tǒng)里呢?不是有CVS、SVN這些免費(fèi)的版本控制系統(tǒng)嗎?因?yàn)長(zhǎng)inus堅(jiān)定地反對(duì)CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費(fèi)的,和Linux的開源精神不符。不過,到了2002年,Linux系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫(kù)之大讓Linus很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對(duì)這種方式表達(dá)了強(qiáng)烈不滿,于是Linus選擇了一個(gè)商業(yè)的版本控制系統(tǒng)BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權(quán)Linux社區(qū)免費(fèi)使用這個(gè)版本控制系統(tǒng)。安定團(tuán)結(jié)的大好局面在2005年就被打破了,原因是Linux社區(qū)牛人聚集,不免沾染了一些梁山好漢的江湖習(xí)氣。開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議(這么干的其實(shí)也不只他一個(gè)),被BitMover公司發(fā)現(xiàn)了(監(jiān)控工作做得不錯(cuò)?。?,于是BitMover公司怒了,要收回Linux社區(qū)的免費(fèi)使用權(quán)。Linus可以向BitMover公司道個(gè)歉,保證以后嚴(yán)格管教弟兄們,嗯,這是不可能的。實(shí)際情況是這樣的:Linus花了兩周時(shí)間自己用C寫了一個(gè)分布式版本控制系統(tǒng),這就是Git!一個(gè)月之內(nèi),Linux系統(tǒng)的源碼已經(jīng)由Git管理了!牛是怎么定義的呢?大家可以體會(huì)一下。Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網(wǎng)站上線了,它為開源項(xiàng)目免費(fèi)提供Git存儲(chǔ),無(wú)數(shù)開源項(xiàng)目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。歷史就是這么偶然,如果不是當(dāng)年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒有免費(fèi)而超級(jí)好用的Git了。

git 的安裝

本文使用的是win7平臺(tái)。 Git可以在Linux、UnixMacWindows這幾大平臺(tái)上安裝了,可以根據(jù)自己的操作系統(tǒng)去官網(wǎng)下載。10分鐘帶你入門git到github

git 常見命令

介紹命令之前先來張圖吧,所有的命令都是圍繞張圖的10分鐘帶你入門git到github

  • Workspace:工作區(qū),就是你平時(shí)存放項(xiàng)目代碼的地方

  • Index / Stage:暫存區(qū),用于臨時(shí)存放文件的改動(dòng),事實(shí)上它只是一個(gè)文件,保存即將提交到文件列表信息。

  • Repository:本地倉(cāng)庫(kù)區(qū)(或版本庫(kù)),就是安全存放數(shù)據(jù)的位置,這里面有我們提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉(cāng)庫(kù)的版本。

  • Remote:遠(yuǎn)程倉(cāng)庫(kù),托管代碼的服務(wù)器。弄清楚上面四個(gè)概念,我們就開始實(shí)操吧。

  • 通過 git init 命令創(chuàng)建Git可以管理的倉(cāng)庫(kù)(本地庫(kù)初始化)


Administrator@XCRBHXD05IEZEVS MINGW64 /d
$ mkdir gitstudy

Administrator@XCRBHXD05IEZEVS MINGW64 /d
cd gitstudy/

Administrator@XCRBHXD05IEZEVS MINGW64 /d/gitstudy
$ git init
Initialized empty Git repository in D:/gitstudy/.git/

執(zhí)行完這個(gè)命令我們可以看到文件下面會(huì)多一個(gè).git的文件夾,以后在這個(gè)文件夾下(工作區(qū))的都可以被git管理了。10分鐘帶你入門git到github

  • git add 命令把文件添加到 暫存區(qū)。下面我們創(chuàng)建( echo >文件名字)一個(gè) demo.txt文件
echo > demo.txt

10分鐘帶你入門git到github此時(shí)的demo.txt文件是帶個(gè)藍(lán)色?的,當(dāng)我們執(zhí)行git add - demo.txt10分鐘帶你入門git到github那如果這個(gè)目錄下面有幾百個(gè)文件都要加到暫存區(qū)怎么辦?此時(shí)可以使用git add . 這個(gè)命令可以把當(dāng)前目錄下所有文件加入暫存區(qū)。

  • git status 查看顯示 工作區(qū)暫存區(qū)的狀態(tài)。
$ git status
  • git commit -m"提交信息描述" 命令把文件添加到 本地倉(cāng)庫(kù)。
$ git commit -m"第一次提交"
[master (root-commit) 22f0a2b] 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 demo.txt

提交后demo.txt顏色是不是變綠了。10分鐘帶你入門git到github10分鐘帶你入門git到github

  • git commit -am"文件描述" 【 am】 就是 【 add modify】 兩個(gè)命令的合并。比如我們修改了兩個(gè)文件demo.txt和demo1.txt。這時(shí)候我們可以直接使用 git commit -am命令
git commit -am"第三次提交"

如果新增了文件,必須使用分開的命令,不能用合并命令。

git add .
git commit -m 'update'

回退

未使用git add(文件必須是commit 過的)
  • 使用 git checkout -- filename(文件名)注意中間有 --
$ git checkout -- demo.txt
  • 回退所有的文件修改使用 git checkout .
 git checkout .
已使用git add,未使用git commit
  • 使用  git reset HEAD filename(指定文件名)
git reset HEAD demo.txt
  • 回退所有文件修改  git reset HEAD
 git reset HEAD

在使用本命令后,本地的修改并不會(huì)消失,而是回到了上面 未使用git add 緩存代碼,繼續(xù)使用用git checkout -- filename,就可以放棄本地修改。

已使用 git commit 未push
  • git reset --hard HEAD^ 回退到上一次commit的狀態(tài)( 這個(gè)命令需謹(jǐn)慎執(zhí)行)。 HEAD^(代表上一次)或者通過 git reset --hard <commitid> 是版本號(hào) 可以根據(jù) git log查看,每次 commit都會(huì)生成一個(gè))
 git reset --hard HEAD^
  • git reset --mixed HEAD^ ( --mixed也可以省略),保留 工作區(qū),并且清空 暫存區(qū)。就是回到上一次 git add 之前。
git reset HEAD^
  • git reset --soft HEAD^重置 HEAD到指定的版本,不會(huì)修改 暫存區(qū)暫存區(qū)就是回到上一次 git commit 之前,適用于合并commit節(jié)點(diǎn)。
git reset --soft HEAD^
  • git revert <commitid> 會(huì)回退到 之前的那次提交,會(huì)產(chǎn)生一個(gè)新的 commit,將這次回退作為一次修改記錄提交,這樣的好處是不修改歷史提交記錄。
 git revert e241441d8a85b2d89
已使用 push
  • git push -f 可以在本地執(zhí)行以上操作后,然后強(qiáng)行推送到遠(yuǎn)程倉(cāng)庫(kù)
git push -f

刪除

  • git rm <文件名> 這個(gè)必須是 commit 之后的文件
 git rm demo.txt
  • git rm -f <文件名> 這個(gè)執(zhí)行 add 未執(zhí)行  commit可以刪除
 git rm -f 4.txt

遠(yuǎn)程倉(cāng)庫(kù)

  • 以上都是在本地倉(cāng)庫(kù)進(jìn)行操作的,提交的代碼別人也是看不到的,如果寫著代碼硬盤壞了咋辦?那是不是所有的代碼都沒了。所以寫完了代碼趕緊推送到服務(wù)器上去。

添加遠(yuǎn)程庫(kù)

用命令git remote add origin git@server-name:path/repo-name.git;關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)

關(guān)聯(lián)之前肯定要在遠(yuǎn)程創(chuàng)建倉(cāng)庫(kù)

  • 首先要到 https://github.com/全球最大同性交友網(wǎng)站上注冊(cè)一個(gè)賬號(hào)。已有賬號(hào)的就忽略了。
  • 接下來就是新建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)了。 10分鐘帶你入門git到github 10分鐘帶你入門git到github
 git remote add origin git@github.com:workit1/studygit.git

關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容。

git push -u origin master

以后,每次本地提交后可以使用命令git push origin master推送最新修改到遠(yuǎn)程倉(cāng)庫(kù)。

從遠(yuǎn)程庫(kù)克隆

  • 前面我們了解先有本地倉(cāng)庫(kù),再有遠(yuǎn)程庫(kù)的時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫(kù)。但是一般實(shí)際開發(fā)中我們是先有遠(yuǎn)程倉(cāng)庫(kù)的,然后從遠(yuǎn)程庫(kù)克隆。 10分鐘帶你入門git到github
 git clone https://github.com/workit1/gitstudy.git

分支管理

  • git checkout -b <創(chuàng)建分支名> 表示創(chuàng)建并切換分支
Administrator@XCRBHXD05IEZEVS MINGW64 /d/gitstudy (master)
$ git checkout -b feature_a
Switched to a new branch 'feature_a'

基于master分支創(chuàng)建了feature_a分支并且切換到了feature_a分支。

  • git checkout <name> 或者  git switch <name> 切換分支
 git checkout master
  • git branch -a 查看所有分支,包含遠(yuǎn)程分支
  • git branch 查看本地所有分支
  • 合并分支
git merge master

當(dāng)有沖突的時(shí)候這里會(huì)個(gè)正在合并的狀態(tài)10分鐘帶你入門git到github

  • 取消合并,此時(shí)你如果不想合并了,可以使用 git merge --abort取消。
git merge --abort
  • 刪除分支
  1. 刪除本地分支 git branch -d <name>
 git branch -d feature_a
  1. 刪除遠(yuǎn)程分支 git branch -D <name>

實(shí)際項(xiàng)目中如果我們需要開發(fā)一個(gè)功能完整的流程是什么樣的呢?多數(shù)公司模式應(yīng)該下面這樣的流程吧。1.先基于主干分支 拉出一個(gè)功能分支(feature_xx)進(jìn)行開發(fā)。2.開發(fā)完成后測(cè)試基于這個(gè)功能分支進(jìn)行測(cè)試。3.測(cè)試完成后,開發(fā)把功能分支合并到主干分支。合并代碼操作如下:

  1. 先切換到主干分支( release),主干分支 git pull 拉下遠(yuǎn)程分支最新代碼(可能有同事提交了新的代碼)
  2. 切回到功能分支 把本地主干最新代碼合( git merge)并到當(dāng)前功能分支,如果合并有沖突就解決沖突后重新提交。
  3. 切換到主干分支執(zhí)行 git merge 功能分支。(這一步實(shí)際工作中一般人是不能這么操作的),代碼必須要先發(fā)起一個(gè) merge request 經(jīng)過代碼 review才能進(jìn)行合并到主干分支的。
  4. 合并完主干分支后,功能分支就可以刪除了。

總結(jié)

  • 以上命令基本上可以應(yīng)付工作中大多數(shù)場(chǎng)景了,不過 git還有很多高級(jí)的玩法。如果大家想更深入學(xué)習(xí)了解的話,我這邊為大家整理了一份 Git的學(xué)習(xí)資料,從學(xué)習(xí)入門到高階。還有 git所有命令的思維導(dǎo)圖。公眾號(hào)【 java金融】回復(fù)【 git】就可以免費(fèi)獲取了。 10分鐘帶你入門git到github
  • 還為大家找了一個(gè)可以在線練習(xí) git的學(xué)習(xí)網(wǎng)站。趕緊去試試吧,超級(jí)有意思,相信你一口氣就通關(guān)了。https://learngitbranching.js.org/?locale=zh_CN 10分鐘帶你入門git到github
  • 視頻地址https://www.bilibili.com/video/BV1Xt4y1X73x/

結(jié)束

  • 由于自己才疏學(xué)淺,難免會(huì)有紕漏,假如你發(fā)現(xiàn)了錯(cuò)誤的地方,還望留言給我指出來,我會(huì)對(duì)其加以修正。
  • 如果你覺得文章還不錯(cuò),你的轉(zhuǎn)發(fā)、分享、贊賞、點(diǎn)贊、留言就是對(duì)我最大的鼓勵(lì)。
  • 感謝您的閱讀,十分歡迎并感謝您的關(guān)注。
  • 特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

    10分鐘帶你入門git到github

    長(zhǎng)按訂閱更多精彩▼

    10分鐘帶你入門git到github

    如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝


參考 https://www.liaoxuefeng.com/wiki/896043488029600/896202780297248


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉