git快速入門之常用命令總結(jié)

簡介

  • Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)(用C寫的)。
  • Git和其他版本控制系統(tǒng)如SVN的一個(gè)不同之處就是有暫存區(qū)的概念烦感。
  • CVS唯卖、SVN是免費(fèi)的集中式的版本控制系統(tǒng),不但速度慢,而且必須聯(lián)網(wǎng)才能使用掏膏。
  • msysgit是Windows版的Git,從https://git-for-windows.github.io下載敦锌。
  • 所有的版本控制系統(tǒng)壤追,其實(shí)只能跟蹤文本文件的改動;如果要真正使用版本控制系統(tǒng)供屉,就要以純文本方式編寫文件行冰。
  • 不要使用Windows自帶的記事本編輯任何文本文件,建議下載Notepad++代替記事本伶丐,把Notepad++的默認(rèn)編碼設(shè)置為UTF-8 without BOM即可悼做。
  • 提交修改和提交新文件是一樣的兩步。
  • 在Git中哗魂,用HEAD表示當(dāng)前版本肛走,也就是最新的提交3628164...882e1e0,上一個(gè)版本就是HEAD录别,上上一個(gè)版本就是HEAD朽色,當(dāng)然往上100個(gè)版本寫100個(gè)比較容易數(shù)不過來,所以寫成HEAD~100组题。
  • 撤銷修改:
    • 場景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容葫男,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file崔列。
    • 場景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容梢褐,還添加到了暫存區(qū)時(shí),想丟棄修改赵讯,分兩步盈咳,第一步用命令git reset HEAD file,就回到了場景1边翼,第二步按場景1操作鱼响。
    • 場景3:已經(jīng)提交了不合適的修改到版本庫時(shí),想要撤銷本次提交组底,參考版本回退一節(jié)丈积,不過前提是沒有推送到遠(yuǎn)程庫。
  • 遠(yuǎn)程庫的名字就是origin斤寇,這是Git默認(rèn)的叫法桶癣,也可以改成別的拥褂,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫娘锁。
  • Git用<<<<<<<,=======饺鹃,>>>>>>>標(biāo)記出不同分支的內(nèi)容莫秆。
  • 分支策略:在實(shí)際開發(fā)中间雀,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
    首先,master分支應(yīng)該是非常穩(wěn)定的镊屎,也就是僅用來發(fā)布新版本惹挟,平時(shí)不能在上面干活;
    那在哪干活呢缝驳?干活都在dev分支上连锯,也就是說,dev分支是不穩(wěn)定的用狱,到某個(gè)時(shí)候运怖,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上夏伊,在master分支發(fā)布1.0版本摇展;
    你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支溺忧,時(shí)不時(shí)地往dev分支上合并就可以了咏连。
  • 在Git中,分支完全可以在本地自己藏著玩鲁森,是否推送祟滴,視你的心情而定:
    • master分支是主分支,因此要時(shí)刻與遠(yuǎn)程同步歌溉;
    • dev分支是開發(fā)分支踱启,團(tuán)隊(duì)所有成員都需要在上面工作,所以也需要與遠(yuǎn)程同步研底;
    • bug分支只用于在本地修復(fù)bug埠偿,就沒必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個(gè)bug榜晦;
    • feature分支是否推到遠(yuǎn)程冠蒋,取決于你是否和你的小伙伴合作在上面開發(fā)。
  • 從本地推送分支乾胶,使用git push origin branch-name抖剿,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交识窿。
  • 配置Git的時(shí)候斩郎,加上--global是針對當(dāng)前用戶起作用的,如果不加喻频,那只針對當(dāng)前的倉庫起作用缩宜。
  • 每個(gè)倉庫的Git配置文件都放在.git/config文件中,別名就在[alias]后面,要?jiǎng)h除別名锻煌,直接把對應(yīng)的行刪掉即可妓布;而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個(gè)隱藏文件.gitconfig中,配置別名也可以直接修改這個(gè)文件宋梧,如果改錯(cuò)了匣沼,可以刪掉文件重新通過命令配置。
  • 如何參與一個(gè)開源項(xiàng)目呢捂龄?比如人氣極高的bootstrap項(xiàng)目释涛,這是一個(gè)非常強(qiáng)大的CSS框架,你可以訪問它的項(xiàng)目主頁倦沧,點(diǎn)“Fork”就在自己的賬號下克隆了一個(gè)bootstrap倉庫枢贿,然后,從自己的賬號下clone:git clone git@github.com:michaelliao/bootstrap.git刀脏,一定要從自己的賬號下clone倉庫局荚,這樣你才能推送修改。如果從bootstrap的作者的倉庫地址git@github.com:twbs/bootstrap.git克隆愈污,因?yàn)闆]有權(quán)限耀态,你將不能推送修改。
  • .gitignore文件自己配置暂雹,把不想上傳的文件或文件夾的名字寫在.gitignore里面就行了首装,每行寫一個(gè)名字,#號是注釋杭跪,在后綴名(如.css)后面加星號(*)仙逻,可以忽略所有是這個(gè)后綴的文件。
  • 多人協(xié)作:自己創(chuàng)建好倉庫涧尿,在所創(chuàng)建倉庫的setting里添加協(xié)作者系奉,被添加的從這個(gè)倉庫clone到本地就可以修改了。
  • git不能push空文件夾姑廉,可以在空文件夾里面加個(gè).gitkeep文件缺亮。

命令行常用命令

  • $ pwd 顯示當(dāng)前目錄;
  • $ mkdir learngit 創(chuàng)建learngit目錄桥言;
  • $ cd learngit 即指定learngit為當(dāng)前目錄萌踱;
  • $ ls -a 列出當(dāng)前目錄下的所有子目錄;
  • $ ls -al ./.ssh 檢查.ssh是否存在($ ls -al ~/.ssh)号阿;
  • ctrl+insert 復(fù)制并鸵;
  • shift+insert 粘貼;
  • 方向上下箭頭可選擇使用過的命令扔涧;
  • ctrl+c 退出當(dāng)前命令园担;
  • $ vi readme.txt 進(jìn)入readme.txt編輯區(qū)普通模式,i 進(jìn)入插入模式,esc返回普通模式粉铐,:q退出,:q!不保存退出卤档,:wq保存并退出蝙泼。
  • $ vi fileName.py 如果開始時(shí)fileName.py不存在,則是創(chuàng)建了fileName.py文件劝枣;
  • $ cat readme.txt 會把文件內(nèi)容打印到屏幕汤踏;
  • $ cat > readme.txt 可以向readme.txt輸入內(nèi)容,輸入的內(nèi)容會替換掉原有內(nèi)容舔腾,按ctrl+d結(jié)束輸入溪胶,會將輸入的內(nèi)容保存到文件。
  • $ touch fileName 創(chuàng)建文件fileName稳诚;
  • $ wc (Word Count) 字?jǐn)?shù)信息統(tǒng)計(jì)哗脖,如 wc index.html;
  • $ more less 查看文件,如more /etc/passwd扳还、less /etc/passwd;
  • $ mv (move) 移動文件或重命名才避,如 mv index.html ./demo/index.html;
  • $ cp (copy) 復(fù)制文件,cp index.html ./demo/index.html;
  • $ head 查看文件前幾行氨距,如 head -5 index.html;
  • $ tail 查看文件后幾行 –n –f桑逝,如 tail index.html、tail -5 index.html
  • $ tab 自動補(bǔ)全俏让,連按兩次會將所有匹配內(nèi)容顯示出來;
  • $ history 查看操作歷史;
  • $ ssh 遠(yuǎn)程登錄楞遏,如ssh root@gitlab.study.com (此處root是用戶名);
  • $ > 和 >>重定向,如echo hello world! > README.md首昔,>覆蓋 >>追加;
  • $ wget 下載寡喝,如wget https://nodejs.org/dist/v4.4.0/node-v4.4.0.tar.gz;
  • $ tar 解壓縮,如tar zxvf node-v4.4.0.tar.gz;
    -$ curl 網(wǎng)絡(luò)請求勒奇,如curl http://www.baidu.com;
  • $ who am i 查看當(dāng)前用戶;
  • $ | 管道符;
  • $ grep 匹配內(nèi)容拘荡,一般結(jié)合管道符使用;

vi編輯器常用命令

  • 命令行模式命令:
    • $ ZZ(大寫) 保存并退出;
    • $ u 轍銷操作,可多次使用;
    • $ dd 刪除當(dāng)前行;
    • $ yy 復(fù)制當(dāng)前行;
    • $ p 粘貼內(nèi)容;
      ctrl+f 向前翻頁;
      ctrl+b 向后翻頁;
    • $ i 進(jìn)入編輯模式撬陵,當(dāng)前光標(biāo)處插入;
    • $ a 進(jìn)入編輯模式珊皿,當(dāng)前光標(biāo)后插入;
    • $ A 進(jìn)入編輯模式,光標(biāo)移動到行尾;
    • $ o 進(jìn)入編輯模式巨税,當(dāng)前行下面插入新行;
    • $ O 進(jìn)入編輯模式蟋定,當(dāng)前行上面插入新行;
  • 底行模式命令:
    • :w 保存;
    • :w filenme另存為草添;
    • :q 退出驶兜;
    • :wq 保存并退出;
    • :e! 撤銷更改,返回到上一次保存的狀態(tài)抄淑;
    • :q! 不保存強(qiáng)制退出屠凶;
    • :set nu 設(shè)置行號;

git常用命令

  • $ git init 把當(dāng)前目錄變成Git可以管理的倉庫肆资;
  • $ git add readme.txt 用命令git add告訴Git矗愧,把文件添加到倉庫;
  • $ git add . 把所有需要add的文件全add了郑原;
  • $ git commit -m "wrote a readme file" 用命令git commit告訴Git唉韭,把文件提交到倉庫(-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容)犯犁;
  • $ git status 可以讓我們時(shí)刻掌握倉庫當(dāng)前的狀態(tài);
  • $ git diff 可以查看修改內(nèi)容;
  • $ git log 顯示從最近到最遠(yuǎn)的提交日志属愤;
  • $ git log -1 顯示最后一次的提交日志;
  • $ git log --pretty=oneline 相對簡潔的顯示提交日志酸役;
  • $ git reset --hard HEAD^ 回退到上一個(gè)版本住诸;
  • $ git reset --hard commit_id 回退到commit_id版本(版本號沒必要寫全,前幾位就可以了涣澡,Git會自動去找)只壳;
  • $ git reflog 查看命令歷史,以便確定要回到未來的哪個(gè)版本;
  • $ git checkout -- readme.txt 把readme.txt文件在工作區(qū)的修改全部撤銷(修改后還沒有被放到暫存區(qū))暑塑;
  • $ git checkout 切換到另一個(gè)分支吼句;
  • $ git reset HEAD readme.txt 可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)事格,再$ git checkout -- readme.txt即可惕艳;
  • $ rm test.txt 從工作區(qū)刪除test.txt文件;
  • $ rmdir (Remove Directory) 刪除文件夾驹愚,只能刪除空文件夾远搪,不常用;
  • $ git rm test.txt 從版本庫中刪除該文件,并且git commit逢捺;
  • $ git checkout -- test.txt 把工作區(qū)誤刪的文件恢復(fù)到版本庫里的最新版本(用版本庫里的版本替換工作區(qū)的版)谁鳍;
  • $ ssh-keygen -t rsa -C "youremail@example.com" 創(chuàng)建SSH Key;

  • $ eval $(ssh-agent -s) 確認(rèn)ssh-agent是可用的劫瞳;
  • $ ssh-add ~/.ssh/id_rsa 將ssh key添加到ssh-agent倘潜;
  • $ clip < ~/.ssh/id_rsa.pub 復(fù)制id_rsa.pub的內(nèi)容;
  • $ ssh -T git@github.com 驗(yàn)證是否配置成功;
  • $ ssh -T -v git@github.com SSH的debug命令;

  • $ git remote show 查看遠(yuǎn)程倉庫的別名志于,如origin涮因;
  • $ git remote add origin git@github.com:michaelliao/learngit.git 本地倉庫關(guān)聯(lián)遠(yuǎn)程庫(前面的michaelliao替換成你自己的GitHub賬戶名)(給遠(yuǎn)程倉庫起別名origin);
  • $ git clone git@github.com:michaelliao/gitskills.git 克隆一個(gè)本地庫伺绽;
  • $ git push -u origin master 把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上养泡,第一次推送master分支時(shí)嗜湃,加上了-u參數(shù)(把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令澜掩,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程购披。);
  • $ git push origin master 把本地master分支的最新修改推送至GitHub肩榕;

  • 分支管理:

    • $ git branch 查看分支刚陡,會列出所有分支,當(dāng)前分支前面會標(biāo)一個(gè)*號点把。;
    • $ git branch <name> 創(chuàng)建分支;
    • $ git checkout <name> 切換分支;
    • $ git checkout -b <name> 創(chuàng)建+切換分支;
    • $ git merge <name> 合并某分支到當(dāng)前分支;
    • $ git branch -d <name> 刪除分支;
    • $ git branch -D <name> 強(qiáng)行刪除;
    • $ git log --graph --pretty=oneline --abbrev-commit 用帶參數(shù)的git log也可以看到分支的合并情況橘荠;
    • $ git merge --no-ff -m "merge with no-ff" dev 準(zhǔn)備合并dev分支屿附,--no-ff參數(shù)表示禁用Fast forward郎逃,因?yàn)楸敬魏喜⒁獎(jiǎng)?chuàng)建一個(gè)新的commit,所以加上-m參數(shù)挺份,把commit描述寫進(jìn)去褒翰;
    • $ git stash 把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作匀泊;
    • $ git stash list 查看工作現(xiàn)場被存到哪里去了优训;
    • $ git stash pop 恢復(fù)的同時(shí)把stash內(nèi)容也刪了(用git stash apply恢復(fù),但是恢復(fù)后各聘,stash內(nèi)容并不刪除揣非,你需要用git stash drop來刪除);
    • $ git stash apply stash@{0} 可以多次stash躲因,恢復(fù)的時(shí)候早敬,先用git stash list查看,然后恢復(fù)指定的stash大脉;
    • $ git remote 查看遠(yuǎn)程庫的信息搞监;
      • $ git remote show 查看遠(yuǎn)程倉庫別名(origin);
      • $ git
    • $ git remote -v 顯示更詳細(xì)遠(yuǎn)程庫的信息镰矿;
    • $ git checkout -b branch-name origin/branch-name 在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支琐驴,本地和遠(yuǎn)程分支的名稱最好一致(這個(gè)命令失敗了不知原因,替代方法本地先創(chuàng)建branch-name秤标,直接推送到遠(yuǎn)程的這個(gè)分支上即可)绝淡;
    • $ git pull 用git pull把最新的提交從origin/dev抓下來;
    • $ git branch --set-upstream-to=origin/dev 設(shè)置本地dev和origin/dev的鏈接(建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián));
  • $ git tag v1.0 打一個(gè)新標(biāo)簽(默認(rèn)標(biāo)簽是打在最新提交的commit上的);

  • $ git tag v0.9 6224937 其中6224937是commit id苍姜,

  • $ git tag 查看所有標(biāo)簽够委,標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的怖现;

  • $ git show <tagname> 查看標(biāo)簽信息;

  • $ git tag -a v0.1 -m "version 0.1 released" 3628164 創(chuàng)建帶有說明的標(biāo)簽茁帽,用-a指定標(biāo)簽名玉罐,-m指定說明文字;

  • $ git tag -s v0.2 -m "signed version 0.2 released" fec145a 通過-s用私鑰簽名一個(gè)標(biāo)簽(簽名采用PGP簽名,因此潘拨,必須首先安裝gpg(GnuPG)吊输,如果沒有找到gpg,或者沒有g(shù)pg密鑰對铁追,就會報(bào)錯(cuò),用PGP簽名的標(biāo)簽是不可偽造的季蚂,因?yàn)榭梢则?yàn)證PGP簽名);

  • $ git tag -d <tagname> 刪除一個(gè)本地標(biāo)簽;

  • $ git push origin :refs/tags/<tagname> 刪除一個(gè)遠(yuǎn)程標(biāo)簽;

  • $ git push origin <tagname> 推送一個(gè)本地標(biāo)簽;

  • $ git push origin --tags 可以推送全部未推送過的本地標(biāo)簽琅束;

  • $ git config --global color.ui true 讓Git顯示顏色扭屁,會讓命令輸出看起來更醒目;

  • $ git add -f App.class 強(qiáng)制添加文件;

  • $ git check-ignore -v App.class 檢查.gitignore的哪個(gè)規(guī)則寫錯(cuò)了涩禀;

  • $ git config --global alias.st status 配置別名料滥,st就表示status;

  • $ git config --global alias.last 'log -1' 長命令加單引號艾船;

  • $ cat .git/config 每個(gè)倉庫的Git配置文件都放在.git/config文件中葵腹;

  • $ cat .gitconfig 當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個(gè)隱藏文件.gitconfig中;

小結(jié)

  • 在這里強(qiáng)烈推薦廖雪峰大神的個(gè)人網(wǎng)站屿岂,里面有各種你想要的干貨践宴!廖大神個(gè)人網(wǎng)站入口: http://www.liaoxuefeng.com/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爷怀,一起剝皮案震驚了整個(gè)濱河市阻肩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌运授,老刑警劉巖烤惊,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異徒坡,居然都是意外死亡撕氧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門喇完,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伦泥,“玉大人,你說我怎么就攤上這事锦溪〔桓” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵刻诊,是天一觀的道長防楷。 經(jīng)常有香客問我,道長则涯,這世上最難降的妖魔是什么复局? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任冲簿,我火速辦了婚禮,結(jié)果婚禮上亿昏,老公的妹妹穿的比我還像新娘峦剔。我一直安慰自己,他們只是感情好角钩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布吝沫。 她就那樣靜靜地躺著,像睡著了一般递礼。 火紅的嫁衣襯著肌膚如雪惨险。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天脊髓,我揣著相機(jī)與錄音辫愉,去河邊找鬼。 笑死供炼,一個(gè)胖子當(dāng)著我的面吹牛一屋,可吹牛的內(nèi)容都是我干的窘疮。 我是一名探鬼主播袋哼,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闸衫!你這毒婦竟也來了涛贯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蔚出,失蹤者是張志新(化名)和其女友劉穎弟翘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骄酗,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稀余,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趋翻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛琳。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踏烙,靈堂內(nèi)的尸體忽然破棺而出师骗,到底是詐尸還是另有隱情,我是刑警寧澤讨惩,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布辟癌,位于F島的核電站,受9級特大地震影響荐捻,放射性物質(zhì)發(fā)生泄漏黍少。R本人自食惡果不足惜寡夹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厂置。 院中可真熱鬧要出,春花似錦、人聲如沸农渊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砸紊。三九已至传于,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醉顽,已是汗流浹背沼溜。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留游添,地道東北人系草。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像唆涝,于是被迫代替她去往敵國和親找都。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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