Git 學(xué)習(xí)

一碉纳、基本操作

  • 將當前目錄初始化一個git倉庫
    git init
  • 將文件快照放入暫存區(qū)域
    git add 文件
  • 提交更新适室,找到暫存區(qū)域的文件嫡意,將快照永久存儲到git倉庫
    git commit -m "提交信息,建議寫有意義的詳細信息,方便從歷史記錄中找到改動記錄"
    可以多次git add 不同文件捣辆,commit一次將暫存區(qū)所有修改提交
  • 查看倉庫當前狀態(tài)
    git status
    下面的命令輸出告訴我們蔬螟,demo.txt被修改過,但未提交
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   demo.txt

no changes added to commit (use "git add" and/or "git commit -a")

  • 查看修改的內(nèi)容
    git diff 文件
  • 查看提交日志
    git log
    如果看的眼花繚亂汽畴,可以加上--pretty=oneline
  • 回退到某一版本
    git reset --hard 某一版本 回退到往上100個版本
    HEAD表示當前版本
    HEAD^表示上一個版本
    HEAD^^表示上上一個版本
    HEAD~100表示往上100個版本
  • 回到之前最新版本
    git reset --hard 版本id id越長越好旧巾,不然容易找到多個版本號
    1. 在命令行窗口還沒關(guān)閉的情況下耸序,找到那一版本的commit id(一串十六進制)
    2. Git提供了一個命令記錄你的每一次命令
      git reflog
      可以從中找到對應(yīng)commit id
  • 撤銷修改
    git checkout -- 文件
    回退到最近一次git commitgit add時的狀態(tài)
    命令中--很重要,沒有就變成“切換到另一個分支”
  • 撤銷暫存區(qū)的文件鲁猩,重新放回工作區(qū)
    git reset HEAD 文件
  • 刪除文件
    git rm 文件
    • 第一種情況 git rm并且 git commit 將刪除版本庫的文件坎怪。
    • 第二種情況git checkout -- 文件 將被刪除的文件恢復(fù)到最新版本。

二廓握、遠程倉庫

  • 創(chuàng)建SSH Key
    ssh-keygen -t rsa -C "郵箱" 會在用戶主目錄下生成.ssh目錄
    id_rsa私鑰搅窿,不可泄露
    id_rsa.pub公鑰,可以告訴任何人
  • 在GitLab上添加SSH密鑰(公鑰)
  • 在GitLab中創(chuàng)建倉庫隙券,并復(fù)制倉庫的SSH格式的URL(注意不是地址欄的URL)
添加遠程倉庫
  • 關(guān)聯(lián)遠程庫男应,在本地倉庫下運行命令
    git remote add origin 倉庫URL 這里是GitLab倉庫的URL
    其中origin是遠程庫的名字,可以修改娱仔。
  • 將本地庫內(nèi)容推送到遠程庫
    git push -u 遠程庫名稱 master
    ??用git push命令沐飘,實際上是把當前分支master推送到遠程。
    ??由于遠程庫是空的牲迫,我們第一次推送master分支時耐朴,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支恩溅,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來隔箍,在以后的推送或者拉取時就可以簡化命令。
    ??從現(xiàn)在起脚乡,只要本地作了提交蜒滩,就可以通過命令git push 遠程庫名稱 master推送到GitLab
從遠程庫克隆
  git clone 遠程倉庫的URL  
  //這樣本地倉庫就已經(jīng)將遠程倉庫項目克隆下來了。

三奶稠、分支管理

??因為創(chuàng)建俯艰、合并和刪除分支非常快锌订,所以Git鼓勵你使用分支完成某個任務(wù)竹握,合并后再刪掉分支,這和直接在master分支上工作效果是一樣的辆飘,但過程更安全啦辐。

  • 創(chuàng)建并切換分支
    git checkout -b 分支
    git checkout 命令加上 -b表示創(chuàng)建并切換,相當于一下兩條命令
    git branch 分支
    git checkout 分支
  • 查看當前分支
    git branch

  • 切換分支
    git checkout 分支

  • 合并指定分支到當前分支
    git merge 指定分支

  • 刪除分支
    git branch -d 分支

  • 解決沖突

修改dev分支后

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
//修改分支后蜈项,從分支切換到master時芹关,Git還會自動提示我們當前master分支比遠程的master分支要超前1個提交信殊。

如果此時再修改master分支內(nèi)容鬓催,合并時會提示沖突

$ git merge feature1
Auto-merging demo.txt
CONFLICT (content): Merge conflict in demo.txt
Automatic merge failed; fix conflicts and then commit the result.
//Git告訴我們腔寡,demo.txt文件存在沖突疼阔,必須手動解決沖突后再提交朽缴。

git status也可以告訴我們沖突的文件
在文件內(nèi)容中Git用<<<<<<<模暗,=======沟绪,>>>>>>>標記出不同分支的內(nèi)容
將沖突的內(nèi)容統(tǒng)一氧吐,解決沖突內(nèi)容后重新提交即可。

  • 查看分支合并情況
    git log --graph --pretty=oneline --abbrev-commit
    git log --graph查看分支合并圖
分支管理策略

??通常怀樟,合并分支時功偿,如果可能,Git會用Fast forward模式漂佩,但這種模式下脖含,刪除分支后,會丟掉分支信息投蝉。
如果要強制禁用Fast forward模式养葵,Git就會在merge時生成一個新的commit,這樣瘩缆,從分支歷史上就可以看出分支信息关拒。

  • 禁用Fast forward模式,創(chuàng)建分支
    git merge --no-ff -m "詳細合并信息" dev
BUG分支

??軟件開發(fā)中庸娱,bug就像家常便飯一樣着绊。有了bug就需要修復(fù),在Git中熟尉,由于分支是如此的強大归露,所以,每個bug都可以通過一個新的臨時分支來修復(fù)斤儿,修復(fù)后剧包,合并分支,然后將臨時分支刪除往果。
??當你接到一個修復(fù)一個代號101的bug的任務(wù)時疆液,很自然地,你想創(chuàng)建一個分支issue-101來修復(fù)它陕贮,但是堕油,當前正在dev上進行的工作還沒有提交。
??并不是你不想提交肮之,而是工作只進行到一半掉缺,還沒法提交,預(yù)計完成還需1天時間戈擒。但是眶明,必須在兩個小時內(nèi)修復(fù)該bug,怎么辦峦甩?
??幸好,Git還提供了一個stash功能,可以把當前工作現(xiàn)場“儲藏”起來凯傲,等修改BUG以后恢復(fù)現(xiàn)場繼續(xù)工作:

  • 將當前工作現(xiàn)場“儲藏”起來犬辰,等以后恢復(fù)現(xiàn)場繼續(xù)工作
    git stash
    現(xiàn)在用git status查看工作區(qū),工作區(qū)就是干凈的(除非沒有被Git管理的文件)
  • 查看“儲藏”的工作現(xiàn)場
    git stash list
  • 恢復(fù)最近一次“儲藏”的工作現(xiàn)場
    git stash apply
    恢復(fù)指定工作現(xiàn)場冰单,通過git stash list查看工作現(xiàn)場的序號幌缝,將(stash@{序號})追加到命令后面
    注意,序號越靠后诫欠,說明儲藏的時間越長
    這樣恢復(fù)后涵卵,stash內(nèi)容并不會刪除,需要手動刪除
  • 刪除“儲藏”的工作現(xiàn)場
    git stash drop
  • 恢復(fù)并刪除“儲藏”的工作現(xiàn)場
    git stash pop
  • master分支出現(xiàn)bug荒叼,說明dev同樣也存在轿偎,Git專門提供了命令,讓我們復(fù)制一個特定的提交到當前分支
    git cherry-pick 特定的提交id
Feature分支

??軟件開發(fā)中被廓,總有無窮無盡的新的功能要不斷添加進來坏晦。
??添加一個新功能時,你肯定不希望因為一些實驗性質(zhì)的代碼嫁乘,把主分支搞亂了昆婿,所以,每添加一個新功能蜓斧,最好新建一個feature分支仓蛆,在上面開發(fā),完成后挎春,合并看疙,最后,刪除該feature分支搂蜓。
??如果在feature分支還沒有合并前狼荞,需要取消這個功能,刪除時會銷毀失敗帮碰,需要使用大寫的-D參數(shù)強制刪除相味。
?? git branch -D 分支

多人協(xié)作

??當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應(yīng)起來了殉挽,并且丰涉,遠程倉庫的默認名稱是origin。

  • 查看遠程庫的信息
    git remote -v -v表示詳細信息
  • 推送分支
    git push 遠程庫名稱 本地分支名稱
  • 抓取分支
    git clone 遠程倉庫的URL 默認只能看到本地的master分支
    如果要在dev分支上開發(fā)斯碌,就必須創(chuàng)建遠程origin的dev分支到本地
    git checkout -b dev origin/dev 創(chuàng)建并且還dev分支一死,并將遠程庫origin/dev 弄下來
    如果最新提交和你推送的提交有沖突,先用git pull把最新提交抓下來傻唾,然后在本地合并投慈,解決沖突承耿,再提交。
//git pull 失敗
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev
//原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接伪煤,根據(jù)提示加袋,設(shè)置dev和origin/dev的鏈接
  • 設(shè)置本地分支dev與遠程分支origin/dev的鏈接
    git branch --set-upstream-to=origin/dev dev

  • 多人協(xié)作工作模式
    盡量將沖突在本地解決

  1. pull遠程庫內(nèi)容到本地先進行合并
  2. 如合并沖突,則解決沖突
  3. 如沒有沖突或解決后抱既,再commit 并push到遠程庫

四职烧、遇到的問題

  • HTTP Basic: Access denied 錯誤
  1. 如果賬號密碼變動,使用git config --system --unset credential.helper 重新輸入賬號密碼
  2. 如果第一條命令解決失敗防泵,使用git config --global http.emptyAuth true
  3. 還可以進入 控制面板>>用戶賬號>>憑據(jù)管理器>>windows憑據(jù)>>普通憑據(jù) 蚀之,在里面找到git,可以編輯用戶密碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捷泞,一起剝皮案震驚了整個濱河市足删,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肚邢,老刑警劉巖壹堰,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骡湖,居然都是意外死亡贱纠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門响蕴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆焊,“玉大人,你說我怎么就攤上這事浦夷∠绞裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵劈狐,是天一觀的道長罐孝。 經(jīng)常有香客問我,道長肥缔,這世上最難降的妖魔是什么莲兢? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮续膳,結(jié)果婚禮上改艇,老公的妹妹穿的比我還像新娘。我一直安慰自己坟岔,他們只是感情好谒兄,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著社付,像睡著了一般承疲。 火紅的嫁衣襯著肌膚如雪邻耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天燕鸽,我揣著相機與錄音赊豌,去河邊找鬼。 笑死绵咱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的熙兔。 我是一名探鬼主播悲伶,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼住涉!你這毒婦竟也來了麸锉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舆声,失蹤者是張志新(化名)和其女友劉穎花沉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳握,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡碱屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛾找。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娩脾。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖打毛,靈堂內(nèi)的尸體忽然破棺而出柿赊,到底是詐尸還是另有隱情,我是刑警寧澤幻枉,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布碰声,位于F島的核電站,受9級特大地震影響熬甫,放射性物質(zhì)發(fā)生泄漏胰挑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一罗珍、第九天 我趴在偏房一處隱蔽的房頂上張望洽腺。 院中可真熱鬧,春花似錦覆旱、人聲如沸蘸朋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藕坯。三九已至团南,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼彪,已是汗流浹背吐根。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辐马,地道東北人拷橘。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像喜爷,于是被迫代替她去往敵國和親冗疮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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

  • Git 是目前最流行的分布式版本控制系統(tǒng)之一檩帐。 版本控制指的是术幔,記錄每次版本變更的內(nèi)容和時間等細節(jié),保留各版本之間...
    神齊閱讀 1,427評論 0 7
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站湃密,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么诅挑? Git是目前世界上最先...
    橫渡閱讀 3,957評論 3 27
  • 這篇博文是自己在學(xué)習(xí)git過程中的思考總結(jié)。本文僅僅代表個人的看法泛源,如有不妥地方還請本文文末留言拔妥。 ?? 原文鏈接g...
    Ming_Hu閱讀 1,075評論 4 18
  • 安裝Git Git的下載地址:Git官網(wǎng)下載地址 Git本地倉庫和命令 配置用戶 下載完Git后,右鍵會有一個Gi...
    TokyoZ閱讀 4,506評論 1 7
  • 教程網(wǎng)址:http://www.liaoxuefeng.com/wiki/0013739516305929606d...
    maybenai閱讀 687評論 0 1