Git初階:入門(mén)及常用命令

Git初階:入門(mén)&常用命令

  • 講師:×××

課程內(nèi)容:

  • 介紹版本控制以及Git
  • Git基本概念以及工作流
  • Git部分常見(jiàn)問(wèn)題
  • Git常用命令
  • Git開(kāi)發(fā)示例

1 / 版本控制以及Git

git:分布式版本控制系統(tǒng)遥巴,進(jìn)行版本控制

分布式版本控制
分布式版本控制

每個(gè)版本存儲(chǔ)完整的文件快照

集中式版本控制

如SVN厢漩,存儲(chǔ)每個(gè)文件的變化疫铜,效率低

  • Git保存的是快照岖研,SVN保存的是文件的變化.
  • Git幾乎所有的操作都可以在本地完成,SVN需要與服務(wù)器通訊以獲得其他版本的文件.
  • Git對(duì)文件內(nèi)容使用SHA-1 hash生成提交版本號(hào),可以保證文件內(nèi)容的完整性,而SVN使用遞增的編號(hào)作為版本號(hào).

2 / Git工作流

GIT的三種狀態(tài)
  • 已修改(modified) → 工作區(qū)
    ↓ add ↓
  • 已暫存(staged) → 暫存區(qū)
    ↓ commit ↓
  • 已提交(commited) → 本地倉(cāng)庫(kù)
    fetch↑↓push
    遠(yuǎn)程倉(cāng)庫(kù)
GIT的三個(gè)區(qū)域
一般開(kāi)發(fā)流程
  • 創(chuàng)建倉(cāng)庫(kù)/從遠(yuǎn)程倉(cāng)庫(kù)克隆
  • 創(chuàng)建并切換到特性分支
  • 創(chuàng)建/修改文件
  • 提交工作區(qū)文件到暫存區(qū)
  • 提交暫存區(qū)文件到本地倉(cāng)庫(kù)
  • 切換到主干分支
  • 合并特性分支到主干分支
  • 推送本地倉(cāng)庫(kù)到遠(yuǎn)程倉(cāng)庫(kù)
git開(kāi)發(fā)示例
git clone git@github.com:wanlonghub/FirstProject.git 克隆遠(yuǎn)程代碼庫(kù)
git branch 查看當(dāng)前分支
git checkouyt -b dev3 新建并切換到dev3分支
vim newfile 新建文件
git status 查看文件狀態(tài)
git add newfile 增加文件到暫存區(qū)
git commit -m "new files" 將文件由暫存區(qū)增加到本地倉(cāng)庫(kù)
git push -u origin dev3 將本地分之推送到遠(yuǎn)程服務(wù)器
git diff 查看不同分支的區(qū)別
git merge  origin master 合并分支
gitlab開(kāi)發(fā)示例

推送過(guò)程免密碼:由http連接方式切換到SSH鏈接方式,增加SSH-KEY者春,即增加本地ssh公鑰到gitlab中。

ssh-keygen
生成本地秘鑰
在gitlab中add公鑰:小人兒->SSH Key->Add
gitignore:忽略提交文件

如果有一些文件/目錄不想提交到git羡榴,可以通過(guò)編輯.gitignore文件進(jìn)行設(shè)置碧查。

例如:不提交 logs下的所有文件/目錄

vim .gitignore

編輯:忽略下列文件
# kdiff3 ignore 
*.orig

# maven ignore
target/

# eclipse ignore
.settings/
.project
.classpath

# idea ignore
.idea/
*.ipr
*.iml
*.iws

# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp

3 / Git常用命令

  • init
    clone
    remote
    status
    log
    reflog
    config
    add
    commit
    fetch
    pull
    push
    rm
    stash
    branch
    checkout
    merge
    diff
    reset
    revert
    rebase
    cherry-pick

  • init
    創(chuàng)建一個(gè)空的本地倉(cāng)庫(kù)或者重新初始化一個(gè)已經(jīng)存在的倉(cāng)庫(kù);會(huì)生成一些默認(rèn)文件校仑。

  • clone
    克隆遠(yuǎn)程倉(cāng)庫(kù)到本地目錄忠售。克隆到本地倉(cāng)庫(kù)的分支名默認(rèn)為origin迄沫。

遠(yuǎn)程分支branch2克隆到本地后稻扬,成為本地的origin/branch2分支
  • remote
    管理相關(guān)的遠(yuǎn)程倉(cāng)庫(kù)。push/pull都和這個(gè)遠(yuǎn)程倉(cāng)庫(kù)相關(guān)羊瘩。

    git remote add origin <項(xiàng)目地址> 將本地項(xiàng)目與遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)
    
    git remote 查看已經(jīng)關(guān)聯(lián)的遠(yuǎn)程倉(cāng)庫(kù)
    
    git remote -v 查看已經(jīng)關(guān)聯(lián)的遠(yuǎn)程倉(cāng)庫(kù)的詳細(xì)信息
    
    git remote --help 查看幫助文檔
    比如查看到:git remote rename <old> <new>
    git remote origin origin2 將origin重命名為origin2
    
  • **status **
    顯示工作區(qū)域的狀態(tài)

  • **log **
    (只)記錄提交日志泰佳,查看分支的提交歷史盼砍;同時(shí)存在本地和遠(yuǎn)程倉(cāng)庫(kù)
哈希值 - 作者 - 時(shí)間
  • **reflog **
    記錄所有(是所有的)分支的所有操作,只存在于本地倉(cāng)庫(kù)逝她;在不同的分支下執(zhí)行浇坐,看到的是不同分支下的操作日志。
  • config
    修改Git配置信息
    git config --add user.name "zhang3" 增加用戶(hù)名
    git config --add user.email "zhang3@163.com" 增加用戶(hù)郵箱
    git config -e 查看配置信息

help的例子
通過(guò) git config --help查閱到:

移除某個(gè)file-option下的section

可以看到:

命令參數(shù) --remove-section
格式:git config [--local|--global|--system] --remove-section section
使用這個(gè)命令黔宛,不僅可以刪除一個(gè)沒(méi)有內(nèi)容的section近刘,而且即使該section下面有內(nèi)容,也會(huì)一起刪除掉

比如我們來(lái)刪除這樣一個(gè)配置:

  首先增加一個(gè)配置 dog
  git config --local dog.name "dog1"
  git config --local dog.email "dog1.email"

  git config -e 查看是否添加完成
dog配置完成
  執(zhí)行:
  git config --local --remove-section dog 
  發(fā)現(xiàn)成功移除臀晃。
  • **add **
    工作區(qū)提交到暫存區(qū)

  • **commit **
    暫存區(qū)提交到本地倉(cāng)庫(kù)

  • **fetch **
    拉取遠(yuǎn)程倉(cāng)庫(kù)到本地倉(cāng)庫(kù)觉渴,見(jiàn)pull。

  • **merge **
    合并分支徽惋,見(jiàn)pull案淋。

用git merge處理沖突

沖突:不同倉(cāng)庫(kù)向遠(yuǎn)程倉(cāng)庫(kù)push代碼,一些被同時(shí)修改的文件將產(chǎn)生沖突:選哪個(gè)合并到遠(yuǎn)程分支险绘?

此時(shí)git提示pull踢京,pull后提示沖突,自動(dòng)合并失敗隆圆。

git merge遇到?jīng)_突可以怎么做:
(1) 修改沖突再提交
(2) git merge --abort取消沖突合并漱挚,回到合并前的狀態(tài)
(3) git status查看工作區(qū)狀態(tài),根據(jù)提示一步一步來(lái)

vim沖突文件:

<<<HEAD和===之間的是本地提交的渺氧;===和>>>之間是別人提交的

采用一方的,再push蹬屹,

  • **pull **
    拉取遠(yuǎn)程倉(cāng)庫(kù)到本地倉(cāng)庫(kù)并合并到本地分支(git fetch + git merge侣背,兩個(gè)命令的組合)

    使用fectch:將遠(yuǎn)程的branch2分支拉取到本地origin/branch2分支,但不會(huì)影響本地branch2
    分支慨默;

    使用merge:講本地origin/branch2分支合并到本地branch2分支贩耐;

    使用pull:相當(dāng)于先執(zhí)行fectch,在執(zhí)行merge厦取。

fetch / merge / pull | 克隆到本地倉(cāng)庫(kù)的分支名默認(rèn)為origin
  • **push **
    將本地倉(cāng)庫(kù)的內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)

如果本地分支與遠(yuǎn)程分支不對(duì)應(yīng)潮太,git并不知道要將本地分支推送到遠(yuǎn)程的哪一個(gè)分支上,因此通過(guò)下面的命令建立本地分支與遠(yuǎn)程分支之間的關(guān)系虾攻,將二者綁定铡买,從而每次推送時(shí)都有一個(gè)對(duì)應(yīng)關(guān)系。

  將本地branch2分支設(shè)置為追蹤來(lái)自遠(yuǎn)程分支origin的分支霎箍,本地分支branch2與遠(yuǎn)程分支origin建立起了綁定關(guān)系
  git push -u origin branch2
  • **rm **
  • stash
  • branch
    管理分支

    git branch 列出當(dāng)前分支
    git branch <分支名> 新建分支
    git branch -d <分支名> 刪除分支
    git branch -v 查看分支詳細(xì)信息
    
  • **checkout **
    切換分支或還原文件
    git checkout <分支名> 切換分支
    git checkout -b <分支名> 創(chuàng)建分支并切換

還原文件

(1)還原成暫存區(qū)的內(nèi)容

  git checkout -- <文件名>

(2)還原成某個(gè)版本的內(nèi)容

  git checkout <版本號(hào)> <文件名>

(3)還原成前x次提交

  HEAD:表示當(dāng)前提交
  HEAD~:表示前一次提交
  HEAD~x:表示前x次提交

  git checkout HEAD~  <文件名> 還原成前一次提交
  • **diff **
    顯示不同提交 / 不同工作區(qū)域 / 不同分支之間的差別

    不同工作區(qū)域之間:
    git diff 如果沒(méi)有顯示奇钞,表示沒(méi)有差別
    git diff --cahcaed 對(duì)比暫存區(qū)和本地倉(cāng)庫(kù)之間的差異;如果沒(méi)有差異則也不會(huì)任何print
    
    不同提交之間:
    git diff <log中的提交hash1> <log中的提交hash2>
    例子:
    git log 查看提交日志
    
我們來(lái)查看兩次提交的不同漂坏,hash的前幾位字符即可代表該hash code
  git diff 2d8629e3d589 2bd281970f1aef4
兩次提交之間的differents
  比較不同分支之間的差別
  git diff master branch
  • **reset **
    重置HEAD到指定的狀態(tài)

    git reset --mixed HEAD~ 將本地倉(cāng)庫(kù)上一個(gè)版本的內(nèi)容拷貝到暫存區(qū)景埃,而不修改工作區(qū)的內(nèi)容
    
    git reset --hard HEAD~ 將本地倉(cāng)庫(kù)上一個(gè)版本的內(nèi)容拷貝到暫存區(qū)和工作區(qū)媒至;刪除不可逆,要謹(jǐn)慎操作
    
    git reset --soft HEAD~ 將HEAD指向上一個(gè)提交
    

多選題:如何將當(dāng)前提交指向上一次提交谷徙,并僅僅覆蓋暫存區(qū)的內(nèi)容:
A. git reset --hard HEAD~
B. git reste HEAD~
C. git reset --mixed HEAD~
D. git reset --softed HEAD~
(BC)

  • **revert **
    撤銷(xiāo)一些已經(jīng)存在的提交

    git revert <版本號(hào)> 拒啰,將被當(dāng)做一次單獨(dú)的提交
    
  • rebase
    用于把一個(gè)分支的修改合并到當(dāng)前分支

  • cherry-pick
    用于把某次提交的內(nèi)容合并到當(dāng)前分支

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市完慧,隨后出現(xiàn)的幾起案子图呢,更是在濱河造成了極大的恐慌,老刑警劉巖骗随,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤织,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鸿染,警方通過(guò)查閱死者的電腦和手機(jī)指蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涨椒,“玉大人摊鸡,你說(shuō)我怎么就攤上這事〔隙” “怎么了免猾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)囤热。 經(jīng)常有香客問(wèn)我猎提,道長(zhǎng),這世上最難降的妖魔是什么旁蔼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任锨苏,我火速辦了婚禮,結(jié)果婚禮上棺聊,老公的妹妹穿的比我還像新娘伞租。我一直安慰自己,他們只是感情好限佩,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布葵诈。 她就那樣靜靜地躺著,像睡著了一般祟同。 火紅的嫁衣襯著肌膚如雪作喘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天耐亏,我揣著相機(jī)與錄音徊都,去河邊找鬼。 笑死广辰,一個(gè)胖子當(dāng)著我的面吹牛暇矫,可吹牛的內(nèi)容都是我干的主之。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼李根,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼槽奕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起房轿,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粤攒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后囱持,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夯接,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年纷妆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盔几。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掩幢,死狀恐怖逊拍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情际邻,我是刑警寧澤芯丧,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站世曾,受9級(jí)特大地震影響缨恒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜度硝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一肿轨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕊程,春花似錦、人聲如沸驼唱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玫恳。三九已至辨赐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間京办,已是汗流浹背掀序。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惭婿,地道東北人不恭。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓叶雹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親换吧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子折晦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,665評(píng)論 9 163
  • 20150617 006 短歌行 曹操對(duì)酒當(dāng)歌,人生幾何沾瓦!譬如朝露满着,去日苦多」彷海慨當(dāng)以慷风喇,憂(yōu)思難忘。何以解憂(yōu)缕探?唯有杜...
    閑謝閱讀 326評(píng)論 0 2
  • 在我居住的這座城市中魂莫, 生活著830萬(wàn)人。 一生會(huì)遇到人大概能夠裝滿(mǎn)這一座城撕蔼。 曾經(jīng)有一篇文章提到豁鲤, 人一生中會(huì)遇...
    Jerme閱讀 412評(píng)論 0 0