Git常用命令行

Git的一些概念

1.本地倉庫

  • 工作區(qū)
    本地修改
  • 暫存區(qū)
    本地修改可以放入暫存區(qū),再批量提交暫存區(qū)到本地倉庫
  • HEAD
    Git倉庫在創(chuàng)建的時候會自動給我們創(chuàng)建第一個分支master(既是分支名牺丙,又是指向改分支最新的一次提交),指向master的指針交HAED

2.遠(yuǎn)程倉庫
公共存放倉庫筒溃,便于交流修改

創(chuàng)建版本庫

  1. 先進(jìn)一個需要版本控制的文件夾,例如:gitdemo
  2. 在gitdemo中執(zhí)行git init初始化這個文件夾,這個時候會在gitdemo的根目錄下生成一個.git的文件夾沾乘,這個文件夾記錄著版本控制的一切信息怜奖。
  3. 把需要版本控制的文件放進(jìn)gitdemo,這時候工作區(qū)就有文件信息了翅阵。
  4. 查看工作區(qū)的文件狀態(tài)git status
  5. 將文件添加進(jìn)暫存區(qū)git add file/folder
  6. 提交暫存區(qū)的內(nèi)容到本地倉庫git commit -m 'commit msg'

版本控制

  • 查看提交日志
    git log(或者為了讓顯示更加簡約git log --pretty=oneline)歪玲,會顯示提交信息。
  • 版本回退git reset
    • git reset --hard HEAD^回退到上一個版本掷匠,git reset --hard HEAD^^回退到上上一個版本滥崩,git reset --hard HEAD-100回退上100個版本。以此類推
    • 還可以直接git reset --hard 提交ID讹语,只要有提交ID钙皮,HEAD都可以指向那個提交ID
  • 撤銷修改
    • 撤銷工作區(qū)
      git checkout -- <file>...
    • 暫存區(qū)撤銷
      git reset HEAD <file>...
      撤銷后的文件修改就會回到工作區(qū)
  • 查看GIT命令行輸入歷史
    git reflog(如果版本回退后悔了,可以用改命令找到之前的commit id再reset回來)
  • 文件刪除
    1. 刪除工作區(qū)中的文件rm file
    2. 用checkout撤銷顽决,或者git rm file從本地版本庫里刪除

遠(yuǎn)程倉庫

  • 添加遠(yuǎn)程倉庫
    git remote add origin <remote url>
  • 克隆遠(yuǎn)程倉庫
    git clone <remote url>
  • 查看遠(yuǎn)程庫信息
    git remote或者更詳細(xì)用git remote -v

分支

  • 創(chuàng)建新分支

    • 創(chuàng)建本地新分支
      git checkout -b dev
      相當(dāng)于
      git branch dev + git checkout dev(切換分支)
  • 查看所有分支
    git branch或者git branch -a
    當(dāng)前分支前面會有*

  • 切換分支
    git checkout <branch name>

  • 分支合并
    合并指定分支到當(dāng)前分支

    • Fast-forward模式
      git merge <branch name>
      這次合并是“快進(jìn)模式”短条,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非巢挪ぃ快茸时。合并分支時,如果可能赋访,Git會用Fast forward模式屹蚊,但這種模式下,刪除分支后进每,會丟掉分支信息汹粤。
    • no-ff模式
      Git就會在merge時生成一個新的commitgit merge --no-ff -m 'commit msg' <branch>,可以用這個命令查看各個分支的信息git log --graph --pretty=oneline --abbrev-commit,這個模式下田晚,即使刪掉合并進(jìn)來的branch嘱兼,也可以看出來是從別的branch合并進(jìn)來的
  • 刪除分支
    刪除指定分支git brach -d <brach name>,分支沒合并贤徒,要強(qiáng)行刪除d換成D

  • 工作區(qū)現(xiàn)場管理

    • 保存現(xiàn)場git stash
    • 查看所有的保存的現(xiàn)場git stash list
    • 恢復(fù)現(xiàn)場git stash pop相當(dāng)于
      git stash applay+git stash drop

應(yīng)用場景:當(dāng)前正在一個分支開發(fā)功能芹壕,而要去另一個分支改BUG,如果當(dāng)前分支功能還沒開發(fā)完不能提交接奈,那就先保存現(xiàn)場踢涌。這樣就能保證working tree clean,才可以切換分支

多人協(xié)作

  • 遠(yuǎn)程倉庫創(chuàng)建新分支

    1. 新建本地分支
    2. 提交本地分支作為遠(yuǎn)程分支
      git push origin <remote-branch> <local-branch>
  • 關(guān)聯(lián)遠(yuǎn)程其他分支

    1. 在本地創(chuàng)建新分支
    2. 用新分支與遠(yuǎn)程非master分支關(guān)聯(lián)
      git branch --set-upstream-to=origin/<branch> <branch>序宦、

    或者還以可以這樣:

    1. git remote update
    2. git fetch
    3. git checkout -b <local-branch> origin/<remote-branch>
  • 遠(yuǎn)程倉庫更新到本地
    一般來說提交之前要把遠(yuǎn)程倉庫更新到本地睁壁,調(diào)用git pull,這個時候如果沖突了,就先解決沖突潘明,再提交

  • 推送到遠(yuǎn)程倉庫
    git push -u origin <branch>
    把當(dāng)前branch推送到遠(yuǎn)程行剂。第一次推送master分支時,加上了-u參數(shù)钳降,Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支厚宰,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,以后只需要git push origin <branch>

那么,開發(fā)中哪些分支需要推送遂填,哪些不需要呢
* master分支是主分支铲觉,因此要時刻與遠(yuǎn)程同步;
* dev分支是開發(fā)分支吓坚,團(tuán)隊所有成員都需要在上面工作备燃,所以也需要與遠(yuǎn)程同步;
* bug分支只用于在本地修復(fù)bug凌唬,就沒必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個bug漏麦;
* feature分支是否推到遠(yuǎn)程客税,取決于你是否和你的小伙伴合作在上面開發(fā)。

  • 合并遠(yuǎn)程分支
    1. 關(guān)聯(lián)遠(yuǎn)程要合并的分支到本地
    2. 在本地執(zhí)行分支合并
    3. 提交本地合并之后的結(jié)果
  • 刪除遠(yuǎn)程分支
    git push origin --delete <branch>

標(biāo)簽

標(biāo)簽是給某次提交取一個有意義的名字撕贞,方便檢索更耻。

  • 給某次提交打tag
    git tag <tag-name> -m <commit-id>
    如果<commit-id>沒有填,那就打在HEAD指向的提交,-m表示這次打tag的說明
  • 查看標(biāo)簽
    • 查看所有標(biāo)簽git tag
    • 查看指定標(biāo)簽git show <tag-name>
  • 推送標(biāo)簽到遠(yuǎn)程倉庫
    • 推送全部尚未推送到遠(yuǎn)程的標(biāo)簽
      git push origin --tags
    • 推送指定標(biāo)簽
      git push origin <tag-name>
  • 刪除標(biāo)簽
    • 刪除本地的標(biāo)簽
      git tag -d <tag-name>
    • 刪除遠(yuǎn)程倉庫標(biāo)簽
      git push origin :refs/tags/<tag_name>捏膨,這里一定要注意之前的空格
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秧均,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子号涯,更是在濱河造成了極大的恐慌目胡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链快,死亡現(xiàn)場離奇詭異誉己,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)域蜗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門巨双,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霉祸,你說我怎么就攤上這事筑累。” “怎么了丝蹭?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵慢宗,是天一觀的道長。 經(jīng)常有香客問我,道長婆廊,這世上最難降的妖魔是什么迅细? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮淘邻,結(jié)果婚禮上茵典,老公的妹妹穿的比我還像新娘。我一直安慰自己宾舅,他們只是感情好统阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筹我,像睡著了一般扶平。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬蕊,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天结澄,我揣著相機(jī)與錄音,去河邊找鬼岸夯。 笑死麻献,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猜扮。 我是一名探鬼主播勉吻,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旅赢!你這毒婦竟也來了齿桃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤煮盼,失蹤者是張志新(化名)和其女友劉穎短纵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僵控,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踩娘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喉祭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养渴。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泛烙,靈堂內(nèi)的尸體忽然破棺而出理卑,到底是詐尸還是另有隱情,我是刑警寧澤蔽氨,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布藐唠,位于F島的核電站帆疟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宇立。R本人自食惡果不足惜踪宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妈嘹。 院中可真熱鬧柳琢,春花似錦、人聲如沸润脸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙驯。三九已至倒堕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爆价,已是汗流浹背垦巴。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铭段,地道東北人骤宣。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像稠项,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲜结,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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