21分钟入门Git

为什么要学git

团队协作开发,对于分支的合并,版本的更新需要用一套很好的工具,来协同开发。各大牛逼的互联网公司,牛逼的开发工程师,都选择git作为版本控制。
更多git的强大之处,这里不再赘述,更多git的介绍请看这里,git-wiki

git 命令大全

获取与创建项目

  • git init
    在项目根目录执行git init,根目录会多出一个.git的文件夹,这个文件夹用于保存如何git相关的操作记录。
  • git clone
    cd进入项目文件夹,执行git clone将会复制别人提交的版本或者你刚在github/gitlab上创建的项目

基本快照

  • git add
    • git add告诉Git,把文件添加到仓库,在每次git commit之前必须把文件提交到仓库才能提交到远程
    • git add [file]将指定文件添加到仓库
    • git add .将所有文件添加到仓库
    • git add -u将所有文件添加到仓库,同时将已删除的文件从仓库中删除
  • git status
    查看当前版本库的状态,看文件是否已添加到仓库,通常查看上次提交之后有哪些文件没有被添加到仓库
  • git diff
    显示尚未缓存的改动
  • git commit
    git commit -m "这里填提交的提示内容",将本地仓库中的文件提交到远程版本库
  • git log
    • git log用于记录每次commit的信息
    • git log --pretty=oneline将每次commit的记录打印成一行,内容更加精简,突出主要的commit -m “”的记录信息
  • git reset
    • git reset HEAD这条命令用来废除这次修改的记录,当前文件回到上一次提交的状态。
    • git reset --hard [commit版本号]
  • git rm(慎用)
    • 使用这个会将所有版本库记录删除

      分支与合并

  • git branch
    • git branch查看本地分支
    • git branch -a查看本地和远程的所有分支
    • git branch -r查看远程分支
    • git branch -d删除本地分支
    • 删除远程dev分支呢?-> git push :origin dev
  • git checkout
    • git checkout [master]切换到本地的master分支
    • git checkout -b [dev]创建并切换到本地的dev分支
  • git merge
    git merge用于本地的指令,如果当前分支是master,本地的另一个分支是dev,git merge dev将本地的dev分支合并到master分支
  • git tag
    • 通常在发布到线上正式环境时会用到
    • git tag publish/1.0.0表示给当前分支打上tag标记
    • 删除远程tag呢?请看git push origin :refs/tags/标签名

分享与更新项目

  • git push
    • git push origin dev表示提交到远程的dev分支。
    • 通常在本地的dev分支推送到远程的dev分支,注意本地远程分支命名要相同,保证代码不会混乱。
  • git pull
    • git pull origin dev表示拉远程的dev分支到本地,并和本地的dev分支合并
    • 通常在本地的dev分支推送到远程的dev分支,注意本地远程分支命名要相同,保证代码不会混乱。
  • git fetch(不常用)
    • git fetch origin dev表示拉远程的dev分支到本地,和本地的dev分支合并
  • git remote
    • 分享本地创建的仓库,希望将它添加到远端仓库
    • git remote add github git@github.com:xuyuan923/test-git.git将本地的仓库推送到github上名为test-git的仓库里

git本地分支与远程分支推送原则

  • 本地的分支推送到远程的分支,保证本地和远程的同名分支相同。
  • 多人合作,每天早上开机前先git pull origin <公共开发分支>,晚上关机前git push origin <公共开发分支>,大家都遵守,这样代码就不会乱
  • 开发时,将本地的分支切换到开发分支在写代码,保证本地的master分支不被污染
    在实际开发中,我们应该按照几个基本原则进行分支管理:
    • 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    • 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    • 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
      所以,团队合作的分支看起来就像这样:

工作区与暂存区理解


我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

高级知识

git ssh

SSH是什么?SSH公钥是让Git服务器验证你的电脑是被认证的,本地配置SSH避免了每次git要求你输入用户名、密码这些认证信息
如何配置SSH公钥看这里,Generating SSH keys

gitignore

.gitignore是一个文件,通常我们是不希望git将本地的编辑器缓存的内容,包括.git文件,以及庞大的node-modules安装包推送到远程,如果仓库里含有.gitignore这个文件,git push会识别哪些是你不想推送到远端的文件,并选择性不推送到远端
来看一个.gitignore文件

1
2
3
4
5
6
7
8
9
10
11
12
#忽略.DS_Store目录下的所有文件
.DS_Store
#忽略node_modules目录下的所有文件
node_modules
npm-debug.log
#仅仅忽略 demo/.svn文件
demo/.svn/
.sass-cache
#忽略所有以.swp结尾的文件
*.swp
.sw*
.idea/*

更多资料

廖雪峰-Git教程
Git 参考手册
Git-book