Git总结(1)—优势&安装&原理&本地操作命令&分支&协作&标签&自定义配置

来源:互联网 发布:js实现小球掉落动画 编辑:程序博客网 时间:2024/05/22 18:38

   最近发现一个项目手动保存了十几个版本,还远远没有结束的迹象。。。所以决定学学版本控制工具,首选当然是好评最高的git了,总结了些必要的命令和使用场景放上来

  1. Git与SVN的区别
  2. Git的安装
  3. 本地版本库(仓库)repository的创建和文件add、commit
  4. 工作区和暂存区Stage
  5. Git命令之查看、回退、撤销、删除:
  6. 分支的意义 & 创建 & 切换 & 合并 & 删除
  7. 分支管理 & bug分支 & feature分支
  8. 多人协作常规操作&push失败操作
  9. 打标签
  10. git的自定义配置:别名&忽略


  • 1.Git与SVN(CVS的改进)相比的最大好处:不用联网,原因如下
    • Git是分布式的版本控制系统,工作组每个人的电脑都有完整的版本库,当然通常会选择一台充当所谓的“中央服务器”,只是为了方便交换各组员提交的修改(组员可能没开电脑)
    • SVN是集中式的版本控制系统,版本库是集中存放在中央服务器的,每次工作时,终端必须联网同步最新的版本库
  • 2.Git的安装:
    • Linux:先输入git,看看安装没;如果没有,就sudo apt-get install git或者 yum install git(看你是那个版本了)
    • Windows:下载msysgit,它是Windows版的模拟环境和Git,下载地址:http://msysgit.github.io/,小白一路默认安装就行了
    • 安装完成后记得进行初始配置如下:表示本机器所有Git仓库都用这个名字和Email,要想单独对某仓库做设置再百度吧
      • git config --global user.name "???"
      • git config --global user.email "???"
  • 3.版本库(仓库)repository的创建和文件添加、提交:
    • 定义:相当于一个目录,目录里所有文件都能被Git管理起来,增删都被跟踪,所以创建可以直接mkdir
    • TXT,网页,代码等的内容变化才能被跟踪,图片视频等二进制文件不能
    • git init 可以将当前目录初始化为Git可以管理的仓库,生成的 .git 目录就是用来跟踪版本库的,不要手动修改它
    • git add 【文件名】在仓库中添加文件,该文件必须存在于Git仓库中
    • git add  : add当前目录及其子目录下,所有被tracked且changes的文件或 .gitignore中没有且未被tracked的文件
    • git commit -m “change somethings”提交文件到仓库,-m 后面接的内容是本次提交的说明,即备注修改了什么

  • 4.工作区和暂存区Stage
    • 创建版本库时的目录就是工作区(Working Directory),不包括 .git,.git是Git的版本库,其中有称为Stage的暂存区,还有自动创建的第一个分支master,以及指向master的一个指针HEAD
    • git add的文件进入stage,git commit之后才进入master分支

  • 5.Git命令之查看、回退、撤销、删除:
    • git status:掌握仓库当前状态,比如哪个文件修改了,哪个文件add了但还没commit等
    • git diff 【文件名】查看某文件修改(增删)了什么
    • git log:查看从最近到最远的提交日志,加上参数 --pretty=oneline ,可以只显示commit id和提交时的备注
    • git reflog:Git会记录你使用的每一个命令,用这个命令可以查看
    • git checkout -- 【文件名】:丢弃工作区的修改,即回到最近一次git commit 或 git add的状态;也能做误删回复,即本地误删了,从版本库里取回最近一次提交的该文件
    • git reset HEAD 【文件名】:撤销暂存区的修改,此时最近一次commit的master内容会覆盖暂存区Stage,如果还想丢弃此时工作区的修改内容,就是checkout了
    • git reset --hard HEAD^ :退回到上一个版本,HEAD是当前版本,^是上一个,^^是上上个,HEAD~10是往前10个版本 ;当然也可以用commit id 代替HEAD^,Git的commit id通常比较长,输入前几位就可以了
    • git rm【文件名在版本库中删除文件,删除后也要git commit
  • 6.分支的意义 & 创建 & 切换 & 合并 & 删除
    • 在自己的分支下干活,到完成一个阶段性工作后,再合并到主分支上;这样既能为自己的工作提供版本迭代,又能不因功能实现一半就提交而影响别人工作
    • git checkout -b dev:创建并切换到dev分支:git branch dev 创建dev分支,再git checkout dev 切换到dev分支;
  • git brance:列出所有分支,当前分支前有一个 * 号,git brance -d dev 删除dev分支
  • git  merge dev:合并dev到当前分支
  • 7.分支管理 & bug分支 & feature分支
    • ------分支管理----------:
      • master分支只用来发布新版本,干活都在dev分支上,dev是不稳定的,发版本时dev合并到master上;;
      • 每个组成员有自己的分支,平时都是向dev合并
    • git log --graph --pretty=oneline --abbrev-commit:查看分支合并图
    • git merge --no-ff -m "备注" dev:禁用Fast forward合并,merge后创建一个新的commit,“备注”就是用来描述它的;这样可以在log里能看到分支历史
    • ------bug 分支----------:
    • git stash:保存当前工作状态,
    • git checkout -b issue-99:创建临时分支,用来修复bug,修复好后,git merge --no-ff -m "merge bug issue-99"
    • git stash pop:先checkout到原先工作的分支,然后用这个命令恢复工作状态并删除stash内容,相当于git stash apply恢复+git stash drop删除,git stash list查看工作现场位置
    • ------feature 分支-------:
    • 出现新功能,就新建一个分支git checkout -b feature-xx
    • 要强行删除没有合并过的分支,git branch -D feature-xx
  • 8.多人协作常规操作&push失败操作
    • ------常规的push和clone-------:
    • git remote:显示远程库名称,加 -v 可以显示可抓取fetch和push的origin地址 
    • git push origin 【分支名】把本地的某个分支推到远程库;除了 master和dev,其他分支都可以不与远程库同步
    • git clone git@github.com:username/repo-name.git:抓取分支,默认只能获得master分支;要获得dev分支,需要
    • git checkout -b dev origin/dev:要在本地创建与远程分支aiang
    • git config user.name "xxx"/user.email "xxx"clone下来之后配置一下name和emai
    • ------push失败的处理-------:
    • git  pull:两个协作者同时提交,发生冲突,用这个命令抓取,手动合并,再add、commit、push
    • git branch --set-upstream 【分支名】 origin/【分支名】如果提示本地分支和远程分支链接关系没有创建no tracking information,用这个命令关联
  • 9.打标签
    • git tag 【标签名】:打标签,默认为HEAD,也可以在后面加上commit id
    • git tag -a 【标签名】 -m “标签信息”:指定标签信息
    • git tag:查看所有标签
    • git tag -d v1.0:删除本地标签v1.0,git push origin:refs/tags/v1.0:先删除本地,才能删除远程库
    • git push origin v1.0推送标签v1.0,git push origin --tags:推送全部标签到远程库
  • 10.git的自定义配置:别名&忽略
    • ------别名-------:.gitconfig
    • git config --global alias.ci commit:--golbal是全局设置的意思,这样设置,git ci就代替git commit
    • git config --global alias.last 'log -l'这样git last 就代表查看最近一次commit
    • git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"好吧这个才是我想说的,前两个只是举个例子,这样变态的偷懒方式才是程序猿应该做的
    • ------忽略-------:.gitignore
    • 有些文件是编译产生的或者带有敏感信息的,不希望提交,那么可以在Git工作区根目录下创建.gitignore文件,记得 .gitignore 也要commit
    • https://github.com/github/gitignore 这个链接有现成的一些常用忽略项,组合、添加就可以用了,git status看看之前Untracked files的提示还在不在,检验是否生效
  • 0 1
    原创粉丝点击