git快速入门之常用命令总结

简介

  • Git是目前世界上最先进的分布式版本控制系统(没有之一)(用C写的)。
  • Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
  • CVS、SVN是免费的集中式的版本控制系统,不但速度慢,而且必须联网才能使用。
  • msysgit是Windows版的Git,从https://git-for-windows.github.io下载。
  • 所有的版本控制系统,其实只能跟踪文本文件的改动;如果要真正使用版本控制系统,就要以纯文本方式编写文件。
  • 不要使用Windows自带的记事本编辑任何文本文件,建议下载Notepad++代替记事本,把Notepad++的默认编码设置为UTF-8 without BOM即可。
  • 提交修改和提交新文件是一样的两步。
  • 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
  • 撤销修改:
    • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
    • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
    • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
  • 远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
  • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。
  • 分支策略:在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
  • 在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定:
    • master分支是主分支,因此要时刻与远程同步;
    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交。
  • 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
  • 每个仓库的Git配置文件都放在.git/config文件中,别名就在[alias]后面,要删除别名,直接把对应的行删掉即可;而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中,配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
  • 如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:git clone git@github.com:michaelliao/bootstrap.git,一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
  • .gitignore文件自己配置,把不想上传的文件或文件夹的名字写在.gitignore里面就行了,每行写一个名字,#号是注释,在后缀名(如.css)后面加星号(*),可以忽略所有是这个后缀的文件。
  • 多人协作:自己创建好仓库,在所创建仓库的setting里添加协作者,被添加的从这个仓库clone到本地就可以修改了。
  • git不能push空文件夹,可以在空文件夹里面加个.gitkeep文件。

命令行常用命令

  • $ pwd 显示当前目录;
  • $ mkdir learngit 创建learngit目录;
  • $ cd learngit 即指定learngit为当前目录;
  • $ ls -a 列出当前目录下的所有子目录;
  • $ ls -al ./.ssh 检查.ssh是否存在($ ls -al ~/.ssh);
  • ctrl+insert 复制;
  • shift+insert 粘贴;
  • 方向上下箭头可选择使用过的命令;
  • ctrl+c 退出当前命令;
  • $ vi readme.txt 进入readme.txt编辑区普通模式,i 进入插入模式,esc返回普通模式,:q退出,:q!不保存退出,:wq保存并退出。
  • $ vi fileName.py 如果开始时fileName.py不存在,则是创建了fileName.py文件;
  • $ cat readme.txt 会把文件内容打印到屏幕;
  • $ cat > readme.txt 可以向readme.txt输入内容,输入的内容会替换掉原有内容,按ctrl+d结束输入,会将输入的内容保存到文件。
  • $ touch fileName 创建文件fileName;
  • $ wc (Word Count) 字数信息统计,如 wc index.html;
  • $ more less 查看文件,如more /etc/passwd、less /etc/passwd;
  • $ mv (move) 移动文件或重命名,如 mv index.html ./demo/index.html;
  • $ cp (copy) 复制文件,cp index.html ./demo/index.html;
  • $ head 查看文件前几行,如 head -5 index.html;
  • $ tail 查看文件后几行 –n –f,如 tail index.html、tail -5 index.html
  • $ tab 自动补全,连按两次会将所有匹配内容显示出来;
  • $ history 查看操作历史;
  • $ ssh 远程登录,如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 网络请求,如curl http://www.baidu.com;
  • $ who am i 查看当前用户;
  • $ | 管道符;
  • $ grep 匹配内容,一般结合管道符使用;

vi编辑器常用命令

  • 命令行模式命令:
    • $ ZZ(大写) 保存并退出;
    • $ u 辙销操作,可多次使用;
    • $ dd 删除当前行;
    • $ yy 复制当前行;
    • $ p 粘贴内容;
      ctrl+f 向前翻页;
      ctrl+b 向后翻页;
    • $ i 进入编辑模式,当前光标处插入;
    • $ a 进入编辑模式,当前光标后插入;
    • $ A 进入编辑模式,光标移动到行尾;
    • $ o 进入编辑模式,当前行下面插入新行;
    • $ O 进入编辑模式,当前行上面插入新行;
  • 底行模式命令:
    • :w 保存;
    • :w filenme另存为;
    • :q 退出;
    • :wq 保存并退出;
    • :e! 撤销更改,返回到上一次保存的状态;
    • :q! 不保存强制退出;
    • :set nu 设置行号;

git常用命令

  • $ git init 把当前目录变成Git可以管理的仓库;
  • $ git add readme.txt 用命令git add告诉Git,把文件添加到仓库;
  • $ git add . 把所有需要add的文件全add了;
  • $ git commit -m "wrote a readme file" 用命令git commit告诉Git,把文件提交到仓库(-m后面输入的是本次提交的说明,可以输入任意内容);
  • $ git status 可以让我们时刻掌握仓库当前的状态;
  • $ git diff 可以查看修改内容;
  • $ git log 显示从最近到最远的提交日志;
  • $ git log -1 显示最后一次的提交日志;
  • $ git log --pretty=oneline 相对简洁的显示提交日志;
  • $ git reset --hard HEAD^ 回退到上一个版本;
  • $ git reset --hard commit_id 回退到commit_id版本(版本号没必要写全,前几位就可以了,Git会自动去找);
  • $ git reflog 查看命令历史,以便确定要回到未来的哪个版本;
  • $ git checkout -- readme.txt 把readme.txt文件在工作区的修改全部撤销(修改后还没有被放到暂存区);
  • $ git checkout 切换到另一个分支;
  • $ git reset HEAD readme.txt 可以把暂存区的修改撤销掉(unstage),重新放回工作区,再$ git checkout -- readme.txt即可;
  • $ rm test.txt 从工作区删除test.txt文件;
  • $ rmdir (Remove Directory) 删除文件夹,只能删除空文件夹,不常用;
  • $ git rm test.txt 从版本库中删除该文件,并且git commit;
  • $ git checkout -- test.txt 把工作区误删的文件恢复到版本库里的最新版本(用版本库里的版本替换工作区的版);
  • $ ssh-keygen -t rsa -C "youremail@example.com" 创建SSH Key;

  • $ eval $(ssh-agent -s) 确认ssh-agent是可用的;
  • $ ssh-add ~/.ssh/id_rsa 将ssh key添加到ssh-agent;
  • $ clip < ~/.ssh/id_rsa.pub 复制id_rsa.pub的内容;
  • $ ssh -T git@github.com 验证是否配置成功;
  • $ ssh -T -v git@github.com SSH的debug命令;

  • $ git remote show 查看远程仓库的别名,如origin;
  • $ git remote add origin git@github.com:michaelliao/learngit.git 本地仓库关联远程库(前面的michaelliao替换成你自己的GitHub账户名)(给远程仓库起别名origin);
  • $ git clone git@github.com:michaelliao/gitskills.git 克隆一个本地库;
  • $ git push -u origin master 把本地库的所有内容推送到远程库上,第一次推送master分支时,加上了-u参数(把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。);
  • $ git push origin master 把本地master分支的最新修改推送至GitHub;

  • 分支管理:

    • $ git branch 查看分支,会列出所有分支,当前分支前面会标一个*号。;
    • $ git branch <name> 创建分支;
    • $ git checkout <name> 切换分支;
    • $ git checkout -b <name> 创建+切换分支;
    • $ git merge <name> 合并某分支到当前分支;
    • $ git branch -d <name> 删除分支;
    • $ git branch -D <name> 强行删除;
    • $ git log --graph --pretty=oneline --abbrev-commit 用带参数的git log也可以看到分支的合并情况;
    • $ git merge --no-ff -m "merge with no-ff" dev 准备合并dev分支,--no-ff参数表示禁用Fast forward,因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去;
    • $ git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作;
    • $ git stash list 查看工作现场被存到哪里去了;
    • $ git stash pop 恢复的同时把stash内容也删了(用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除);
    • $ git stash apply stash@{0} 可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash;
    • $ git remote 查看远程库的信息;
      • $ git remote show 查看远程仓库别名(origin);
      • $ git
    • $ git remote -v 显示更详细远程库的信息;
    • $ git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致(这个命令失败了不知原因,替代方法本地先创建branch-name,直接推送到远程的这个分支上即可);
    • $ git pull 用git pull把最新的提交从origin/dev抓下来;
    • $ git branch --set-upstream-to=origin/dev 设置本地dev和origin/dev的链接(建立本地分支和远程分支的关联);
  • $ git tag v1.0 打一个新标签(默认标签是打在最新提交的commit上的);

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

  • $ git tag 查看所有标签,标签不是按时间顺序列出,而是按字母排序的;

  • $ git show <tagname> 查看标签信息;

  • $ git tag -a v0.1 -m "version 0.1 released" 3628164 创建带有说明的标签,用-a指定标签名,-m指定说明文字;

  • $ git tag -s v0.2 -m "signed version 0.2 released" fec145a 通过-s用私钥签名一个标签(签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错,用PGP签名的标签是不可伪造的,因为可以验证PGP签名);

  • $ git tag -d <tagname> 删除一个本地标签;

  • $ git push origin :refs/tags/<tagname> 删除一个远程标签;

  • $ git push origin <tagname> 推送一个本地标签;

  • $ git push origin --tags 可以推送全部未推送过的本地标签;

  • $ git config --global color.ui true 让Git显示颜色,会让命令输出看起来更醒目;

  • $ git add -f App.class 强制添加文件;

  • $ git check-ignore -v App.class 检查.gitignore的哪个规则写错了;

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

  • $ git config --global alias.last 'log -1' 长命令加单引号;

  • $ cat .git/config 每个仓库的Git配置文件都放在.git/config文件中;

  • $ cat .gitconfig 当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中;

小结

  • 在这里强烈推荐廖雪峰大神的个人网站,里面有各种你想要的干货!廖大神个人网站入口: http://www.liaoxuefeng.com/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容