Git學習筆記


  • 創建版本庫

    1.創建目錄 mkdir learngit,進入cd learngit

    2.將目錄變成Git可以管理的倉庫git init,此時Git倉庫就建好了,可以通過ls -ah來查看

  • 常用的git命令及解釋

    1.git init 初始化Git管理倉庫

    2.git add file文件添加到倉庫

    3.git commit -m "添加的注釋" 提交

    4.git status 查看add之后未commit的文件

    5.git diff 查看上一步的區別

    6.git log --pretty=oneline 查看版本歷史,后面參數可以單行查看,顯示更加清晰

    7.git reset --hard commit_id版本回退

    8.git checkout -- readme.txt

    把readme.txt文件在工作區的修改全部撤銷,就是讓這個文件回到最近一次git commitgit add時的狀態。例如:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。或者當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,先git reset HEAD file,就回到了場景1,第二步按場景1操作。

    9.git rm test.txt并且git commit刪除。

    10.git remote add origin git@github.com:michaelliao/learngit.git添加遠程倉庫。

    11.git push -u origin master

    把本地庫的內容推送到遠程,
    由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。推送成功后遠程與本地的庫應該是一樣的。

    12.git push origin master本地提交之后就可以遠程推送。

    13.git clone git@github.com:michaelliao/gitskills.git從遠程庫克隆,首先遠程庫創建倉庫gitskills

    14.git checkout -b dev創建并切換分支相當于git branch devgit checkout dev

    15.git branch 查看分支情況,當前分支有星號。

    16.git merge
    合并指定分支到當前分支,當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。git status可以查看沖突情況

    17.git branch -d dev刪除分支。

    18.git checkout name切換分支。

    19.git log --graph --pretty=oneline --abbrev-commit查看分支情況。

    20.git merge --no-ff -m "merge with no-ff" dev
    不使用Fast forward合并模式,因為本次合并要創建一個新的commit,所以加上-m參數,把commit描述寫進去


    21.git stash將當前的工作現場儲存起來等以后恢復現場繼續工作。

    場景:當你接到一個修復一個代號101的bug的任務時,很自然地,你想創建一個分支issue-101來修復它,但是,等等,當前正在dev上進行的工作還沒有提交,并不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎么辦?

    a、git stash暫存。

    b、git status確認工作區是干凈的。

    c、決定在master分支上解決git branch master

    d、git checkout -b issu-101創建臨時分支

    e、修復bug,然后提交文件git add file..

    f、修復完成后,切換到master分支,合并,刪除issu-101分支

    g、回到dev分支繼續干活git checkout dev

    h、git stash list查看暫存

    i、git stash apply恢復,但是恢復后,stash內容并不刪除

    j、git stash drop刪除

    k、git stash pop恢復并刪除stash

    22.git checkout -b feature-vulcan

    軟件開發中,總有無窮無盡的新的功能要不斷添加進來。
    添加一個新功能時,你肯定不希望因為一些實驗性質的代碼,把主分支搞亂了,所以,每添加一個新功能,最好新建一個feature分支,在上面開發,完成后,合并,最后,刪除該feature分支。

    23.git branch -D <name>強行刪除


    24.git remote -v查看遠程倉庫

    25.git push origin branch-name從本地推送分支

    26.git pull遠程抓取分支

    27.git checkout -b branch-name origin/branch-name在本地創建和遠程分支對應的分支

    28.git branch --set-upstream branch-name origin/branch-name建立本地分支和遠程分支的關聯


    29.git tag v1.1給當前分支的最新提交的commit上打一個標簽

    30.git tag查看所有標簽

    31.git tag v0.9 6224937給某個commit_id打上標簽

    32.git show tagname查看標簽信息

    33.git tag -a v0.1 -m "version 0.1 released" 3628164 創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字

    34.git tag -s <tagname> -m "blablabla..."可以用PGP簽名標簽;

    35.git tag -d v0.1刪除標簽

    36.git push origin v1.0推送某個標簽到遠程

    37.git push origin --tags一次性推送全部尚未推送到遠程的本地標簽

    38.git tag -d v0.9先從本地刪除

    39.git push origin :refs/tags/v0.9從遠程刪除


    40.git config --global color.ui true文件名就會標上顏色


    41.git check-ignore查找哪個規則寫錯了,忽略文件時需要添加.gitignore文件,所有配置文件可以直接在線瀏覽:<a >傳送門</a>


    42.git config --global alias.st status配置別名,告訴Git,以后st就表示status

    43.git config --global alias.unstage 'reset HEAD'此時 git unstage test.py相當于git reset HEAD test.py

    44.git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"git log估計會很爽...

  • 多人協作

    a、可以試圖用git push origin branch-name推送自己的修改;

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

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

    d、沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!

    如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

  • 標簽

    發布一個版本時,我們通常先在版本庫中打一個標簽(tag),這樣,
    就唯一確定了打標簽時刻的版本。將來無論什么時候,取某個標簽的
    版本,就是把那個打標簽的時刻的歷史版本取出來。所以,標簽也是
    版本庫的一個快照。tag就是一個讓人容易記住的有意義的名字,它跟
    某個commit綁在一起

  • 注意

    1.git loggit reflog的區別:

    前者回退版本之后,此版本之后的記錄就自動抹除了,而后者不會,可以查到所有的記錄。

    2.git diffgit diff --cache的區別:

    前者是是工作區(work dict)和暫存區(stage)的比較,而后者是暫存區(stage)和分支(master)的比較。

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

    4.忽略文件的原則是:
    忽略操作系統自動生成的文件,比如縮略圖等;
    忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通 過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比 如Java編譯產生的.class文件;
    忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

    5.配置Git的時候,加上--global是針對當前用戶起作用的,如果不加,那只針對當前的倉庫起作用。

    a、每個倉庫的Git配置文件都放在.git/config文件中
    b、當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig

  • 概念

    工作區:就是建立的文件夾倉庫learngit

    版本庫:工作區的隱藏的.git文件夾

    暫存區:版本庫里的最重要的部分,git add添加的位置

    分支:git自動為我們創建的為master,還有一個指向master的指針HEAD,git commit提交的位置

    如下圖:

    工作區與緩存區

分布式VS集中式:</br>
  分布式版本系統的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯網都可以正常工作,而SVN在沒有聯網的時候是拒絕干活的!當有網絡的時候,再把本地提交推送一下就完成了同步,真是太方便了!現在有了分支,就不用怕了。你創建了一個屬于你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • Git教程 一、Git簡介 1.1. Git的誕生1.2.集中式的vs分布式 二、安裝Git 三、創建版本庫 四、...
    曹淵說創業閱讀 959評論 0 2
  • git學習筆記 聲明 本文是本人學習Git過程中所做的筆記,以便日后查閱,文中多有錯漏之處,不建議用作學習材料,文...
    sayonara_yoyo閱讀 694評論 0 1
  • 書《一個廣告人的自白》 作者:大衛·奧格威 昨天的晨讀分享說的是如何將所要做的事情做好并能培養出習慣;今天...
    思悅澄心閱讀 250評論 0 1
  • 前不久參加一次朋友的聚會,席間見到了多年不見的老友峰,一直愁容滿面,沉默寡言。原來他見別的同學都買了房買了車,而自...
    冰葉草閱讀 316評論 2 2
  • 大學中的各種課程基本都是開放的,也就是說只要你能出入大學基本就能在大學里聽任意你想聽的課。這就是所謂的蹭課,據此我...
    瑜yuon閱讀 545評論 0 0