git代碼管理工具

Git是目前開源軟件使用做多的版本管理軟件。

安裝Git

以debian系統(tǒng)為例,安裝命令是

apt install git

安裝成功之后就可以直接clone遠(yuǎn)程倉庫到本地了,但是如果想向遠(yuǎn)程倉庫提交代碼對的話,就需要做下面幾步

  1. 用個(gè)人郵箱注冊github
  2. 配置本地git
git config --global user.name "yourname"
git config --global user.email youremail
  1. 生成ssh key
ssh-keygen -t rsa -C "youremail"

將生成的~/.ssh/id_rsa.pub中的內(nèi)容添加到github賬戶,路徑settings -> SSH and GPG keys

Git操作

獲取Git倉庫

這里有一個(gè)概念,Git的倉庫并不只是指Github服務(wù)器上存儲的倉庫,在我們本地存儲的也是Git的倉庫,因此獲取Git倉庫的方法有兩個(gè)

  1. 獲取遠(yuǎn)程倉庫
git clone remote_url
  1. 將當(dāng)前目錄初始化為Git倉庫
git init

使用init命令初始化后,我們會發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè).git目錄,這里面就是Git的版本控制信息。

將改動納入版本控制

獲取遠(yuǎn)程Git倉庫后,做的最多的就是在工作區(qū)修改、新增和刪除文件,也就是實(shí)實(shí)在在看到的代碼文件,修改完成之后就需要將本次的修改內(nèi)容納入到Git的版本控制中,一般的步驟如下:

git status # 將顯示出做了什么改動,例如modify、add和remove
git diff # 查看文件修改了哪些內(nèi)容
git add # 將文件的改動情況提交到暫存區(qū)
git commit -m "log" # 將暫存區(qū)中的內(nèi)容提交到本地倉庫的master分支

從上面的指令可以看出,在執(zhí)行完commit之后,我們所做的修改已經(jīng)納入到了git的版本控制中,這一點(diǎn)可以通過git log查看到。使用過svn版本控制的童靴從這里可以看出svn和git的本質(zhì)差別,svn的每次提交是提交到svn服務(wù)器,也就是中心;而git則是將修改提交到本地倉庫,有點(diǎn)去中心化的意思。后面我們也會講到git的遠(yuǎn)程倉庫,但遠(yuǎn)程倉庫代碼的意義更多的在于共享。

推送到遠(yuǎn)程倉庫

筆者一般是先創(chuàng)建遠(yuǎn)程倉庫,然后clone下來,這樣就可以直接提交

git fetch # 拉取遠(yuǎn)程倉庫的修改
git push origin master

將本地倉庫master分支的修改提交到遠(yuǎn)程倉庫,這里的origin是遠(yuǎn)程倉庫url的別名,可以使用git remote -v來查看。使用git clone指令獲取的倉庫origin默認(rèn)值是遠(yuǎn)程倉庫url,本地創(chuàng)建的Git倉庫需要使用命令來鏈接本地與遠(yuǎn)程。

git remote add origin https://github.com/xxx/test.git

完成提交之后我們可以通過

git log

來查看提交記錄。

修改回退

在實(shí)際工作過程中,有時(shí)候我們會需要撤銷我們的修改,在不同的階段回退的指令是不同的。

只修改了代碼,還沒有add到暫存區(qū)

這個(gè)階段我們可以手動將修改內(nèi)容修改回來,但是如果記不得具體的內(nèi)容或者涉及的文件比較多的時(shí)候可以使用

git cheakout -- filename # 回退工作區(qū)文件的修改,回退到暫存區(qū)中該文件的狀態(tài)

這里我們需要搞清楚暫存區(qū)中文件的狀態(tài)有兩個(gè)映像:工作區(qū)add提交的和自身commit到本地倉庫的,否則這里會有一點(diǎn)亂。

已經(jīng)將修改add到暫存區(qū)

這種情況下我們需要把文件的改動從暫存區(qū)中撤除

git reset HEAD filename # 利用本地倉庫master分支的HEAD節(jié)點(diǎn)刷一下暫存區(qū)中的文件狀態(tài),也就是清空工作區(qū)到暫存區(qū)的提交內(nèi)容

完成之后我們可以繼續(xù)修改或者是checkout徹底撤銷之前的修改。

已經(jīng)將修改從暫存區(qū)commit到本地倉庫,有兩種方法

  1. 強(qiáng)制回退 不推薦
git reset --hard old_commit_id && git push -f # 回退到old_commit_id并將此次修改強(qiáng)制推送到遠(yuǎn)程倉庫

這里只是調(diào)整了本地倉庫master分支的HEAD節(jié)點(diǎn)的指向,commit_id可以通過git log命令獲取到。

  1. 將回退作為修改 強(qiáng)烈推薦
    假設(shè)我們師門使用git log查詢到最后兩次的提交id是id1id0,我們要回退這兩次修改
git revert id0 && git revert id1 # 回退順序與提交順序相反
或者
git revert id1^..id0

下面講一下cherry-pick - 一個(gè)有生活感的概念,最后兩次提交還是id1id0,但是需要回退只有id1,這個(gè)時(shí)候應(yīng)該這么辦

git revert id0 && git revert id1 # 回退id0和id1
git commit id0_modify # 重新提交id0的修改

分支管理

分支的作用在于并行開發(fā),能夠提高開發(fā)效率。

git branch bra_name # 創(chuàng)建分支bra_name
git branch -l # 查看所有分支,當(dāng)前分支前面有*標(biāo)記
git checkout bra_name # 切換到分支bra_name
git merge bra_name # 將bra_name中的修改合并到當(dāng)前分支,注意在合并之前一定要切換到目標(biāo)分支

參考文獻(xiàn)
[1] Git如何優(yōu)雅的進(jìn)行版本回退

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 15,926評論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,944評論 0 11
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/。)是一個(gè)開源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,565評論 0 13
  • 源代碼管理工具的起源 為什么會出現(xiàn)源代碼管理工具? 為了解決在軟件開發(fā)過程中,由源代碼引發(fā)的各種蛋疼繁瑣問題 源代...
    小白文_Vincent閱讀 3,192評論 2 8
  • 1.創(chuàng)建SSH Key 回車鍵后會有下面顯示: 然后會提示讓輸入密碼:這個(gè)密碼是 push時(shí)候的密碼 不是gith...
    暮雨嵐風(fēng)閱讀 381評論 0 0