Git學習筆記

創(chuàng)建版本庫:

  • 初始化一個Git倉庫齿诞,使用git init命令。
  • 添加文件到Git倉庫骂租,分兩步:
  1. 使用命令git add <file>祷杈,注意,可反復多次使用渗饮,添加多個文件但汞;
  2. 使用命令git commit -m <message>(message內容要加雙引號),完成互站。

時光機穿梭:

  • 要隨時掌握工作區(qū)的狀態(tài)私蕾,使用git status命令。
  • 如果git status告訴你有文件被修改過胡桃,用git diff可以查看修改內容

版本回退:

  • HEAD指向的版本就是當前版本踩叭,因此,Git允許我們在版本的歷史之間穿梭翠胰,使用命令git reset --hard commit_id容贝。
  • 穿梭前,用git log可以查看提交歷史之景,以便確定要回退到哪個版本斤富。
  • 要重返未來,用git reflog查看命令歷史闺兢,以便確定要回到未來的哪個版本茂缚。

工作區(qū)和暫存區(qū)

管理修改

撤銷修改:

場景1:當你改亂了工作區(qū)某個文件的內容,想直接丟棄工作區(qū)的修改時屋谭,用命令git checkout -- file脚囊。

場景2:當你不但改亂了工作區(qū)某個文件的內容,還添加到了暫存區(qū)時桐磁,想丟棄修改悔耘,分兩步,第一步用命令git reset HEAD <file>我擂,就回到了場景1衬以,第二步按場景1操作缓艳。

場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交看峻,參考版本回退一節(jié)阶淘,不過前提是沒有推送到遠程庫。

刪除文件:

  • 命令git rm用于刪除一個文件互妓。如果一個文件已經(jīng)被提交到版本庫溪窒,那么你永遠不用擔心誤刪,但是要小心冯勉,你只能恢復文件到最新版本澈蚌,你會丟失最近一次提交后你修改的內容。

遠程倉庫

添加遠程庫:

  • 要關聯(lián)一個遠程庫灼狰,使用命令git remote add origin git@server-name:path/repo-name.git宛瞄;(origin是默認遠程庫名稱)
  • 關聯(lián)一個遠程庫時必須給遠程庫指定一個名字,origin是默認習慣命名交胚;
  • 關聯(lián)后份汗,使用命令git push -u origin master第一次推送master分支的所有內容;
  • 此后承绸,每次本地提交后裸影,只要有必要,就可以使用命令git push origin master推送最新修改军熏;
  • 分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作卷扮,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的荡澎!當有網(wǎng)絡的時候,再把本地提交推送一下就完成了同步晤锹!

從遠程庫克履︶!:

  • 要克隆一個倉庫,首先必須知道倉庫的地址鞭铆,然后使用git clone命令克隆或衡。
  • Git支持多種協(xié)議,包括https车遂,但ssh協(xié)議速度最快封断。

分支管理:

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

  • Git鼓勵大量使用分支:
  • 查看分支:git branch
  • 創(chuàng)建分支:git branch <name>
  • 切換分支:git checkout <name>或者git switch <name>
  • 創(chuàng)建+切換分支:git checkout -b <name>或者git switch -c <name>
  • 合并某分支到當前分支:git merge <name>
  • 刪除分支:git branch -d <name>

解決沖突:

  • 當Git無法自動合并分支時,就必須首先解決沖突舶担。解決沖突后坡疼,再提交,合并完成衣陶。
  • 解決沖突就是把Git合并失敗的文件手動編輯為我們希望的內容柄瑰,再提交闸氮。
  • 用git log --graph命令可以看到分支合并圖。
  • git log --graph --pretty=oneline --abbrev-commit指令的含義:
    1. graph 圖形
    2. pretty=oneline 減少數(shù)據(jù)
    3. abbrev-commit 頭部數(shù)據(jù)減少

分支管理策略:

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

Bug分支:

  • 修復bug時,我們會通過創(chuàng)建新的bug分支進行修復藏姐,然后合并隆箩,最后刪除;
  • 當手頭工作沒有完成時羔杨,先把工作現(xiàn)場git stash一下捌臊,然后去修復bug,修復后兜材,再git stash pop理澎,回到工作現(xiàn)場;
  • 在master分支上修復的bug曙寡,想要合并到當前dev分支糠爬,可以用git cherry-pick <commit>命令如$ git cherry-pick 4c805e2,把bug提交的修改“復制”到當前分支举庶,避免重復勞動执隧。

Feature分支:

  • 開發(fā)一個新feature,最好新建一個分支户侥;
  • 如果要丟棄一個沒有被合并過的分支镀琉,可以通過git branch -D <name>強行刪除。

多人協(xié)作:

  • 查看遠程庫信息蕊唐,使用git remote -v屋摔;
  • 本地新建的分支如果不推送到遠程,對其他人就是不可見的替梨;
  • 從本地推送分支钓试,使用git push origin branch-name,如果推送失敗副瀑,先用git pull抓取遠程的新提交弓熏;
  • 在本地創(chuàng)建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name俗扇,本地和遠程分支的名稱最好一致硝烂;
  • 建立本地分支和遠程分支的關聯(lián),使用git branch --set-upstream branch-name origin/branch-name铜幽;
  • 從遠程抓取分支滞谢,使用git pull串稀,如果有沖突,要先處理沖突狮杨。

Rebase:

  • rebase操作可以把本地未push的分叉提交歷史整理成直線母截;
  • rebase的目的是使得我們在查看歷史提交的變化時更容易,因為分叉的提交需要三方對比橄教。

標簽管理:

創(chuàng)建標簽:

  • 注意:標簽總是和某個commit掛鉤清寇。如果這個commit既出現(xiàn)在master分支,又出現(xiàn)在dev分支护蝶,那么在這兩個分支上都可以看到這個標簽华烟。
  • 命令git tag <tagname>用于新建一個標簽,默認為HEAD持灰,也可以指定一個commit id盔夜;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定標簽信息;
  • 命令git tag可以查看所有標簽堤魁。

操作標簽:

  • 命令git push origin <tagname>可以推送一個本地標簽喂链;
  • 命令git push origin --tags可以推送全部未推送過的本地標簽;
  • 命令git tag -d <tagname>可以刪除一個本地標簽妥泉;
  • 命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽椭微;
  • 如果標簽已經(jīng)推送到遠程,先從本地刪除再從遠程刪除盲链。

使用GitHub:

  • 在GitHub上蝇率,可以任意Fork開源倉庫;
  • 自己擁有Fork后的倉庫的讀寫權限匈仗;
  • 可以推送pull request給官方倉庫來貢獻代碼瓢剿。

自定義Git:

忽略特殊文件:

  • 忽略某些文件時,需要編寫.gitignore悠轩;
  • .gitignore文件本身要放到版本庫里,并且可以對.gitignore做版本管理攻泼!

配置別名

搭建Git服務器:

  • 要方便管理公鑰火架,用Gitosis;
  • 要像SVN那樣變態(tài)地控制權限忙菠,用Gitolite何鸡。

使用SourceTree:

  • 使用SourceTree可以以圖形界面操作Git,省去了敲命令的過程牛欢,對于常用的提交骡男、分支、推送等操作來說非常方便傍睹。
  • SourceTree使用Git命令執(zhí)行操作隔盛,出錯時犹菱,仍然需要閱讀Git命令返回的錯誤信息。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吮炕,一起剝皮案震驚了整個濱河市腊脱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龙亲,老刑警劉巖陕凹,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鳄炉,居然都是意外死亡杜耙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門拂盯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佑女,“玉大人,你說我怎么就攤上這事磕仅∩罕” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵榕订,是天一觀的道長店茶。 經(jīng)常有香客問我,道長劫恒,這世上最難降的妖魔是什么贩幻? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮两嘴,結果婚禮上丛楚,老公的妹妹穿的比我還像新娘。我一直安慰自己憔辫,他們只是感情好趣些,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贰您,像睡著了一般坏平。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锦亦,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天舶替,我揣著相機與錄音,去河邊找鬼杠园。 笑死顾瞪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播陈醒,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惕橙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孵延?” 一聲冷哼從身側響起吕漂,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尘应,沒想到半個月后惶凝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡犬钢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年苍鲜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玷犹。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡混滔,死狀恐怖,靈堂內的尸體忽然破棺而出歹颓,到底是詐尸還是另有隱情坯屿,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布巍扛,位于F島的核電站领跛,受9級特大地震影響,放射性物質發(fā)生泄漏撤奸。R本人自食惡果不足惜吠昭,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胧瓜。 院中可真熱鬧矢棚,春花似錦、人聲如沸府喳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钝满。三九已至肉津,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舱沧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工偶洋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熟吏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像牵寺,于是被迫代替她去往敵國和親悍引。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容

  • [TOC] Git 內部實現(xiàn)原理剖析[http://www.reibang.com/p/8154ac47d406...
    Whyn閱讀 615評論 0 0
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/帽氓。)是一個開源的分布式版本控制系統(tǒng)趣斤,...
    君惜丶閱讀 3,529評論 0 13
  • 基于廖雪峰老師的git教程整理 一.Git簡介 git是用C語言編寫的分布式控制版本系統(tǒng) 安裝Git 在Mac O...
    OhYoung1990閱讀 205評論 0 0
  • 簡書本身不支持生成目錄,自己通過pandoc生成的目錄在簡書也變成了新頁面打開黎休。心好累浓领,推薦大家用這個簡書文章左側...
    mkitclear閱讀 393評論 0 0
  • Git教程 一、Git簡介 1.1. Git的誕生1.2.集中式的vs分布式 二势腮、安裝Git 三联贩、創(chuàng)建版本庫 四、...
    曹淵說創(chuàng)業(yè)閱讀 950評論 0 2