git


  • Repository 仓库、版本库

  • git初始化后,会在当前目录生成一个.git目录,也就是版本库

  • Workspace 工作区

  • .git所在的目录就是工作区,一般是项目的根目录

  • index 索引

  • 介于工作区和版本库之间,暂存修改的

  • remote 远程版本库

  • 网络上的另一个版本库,可以和本地交互

初始化

git init

添加文件

git add index.htm
  • 把文件的当前变化增加到索引中,

  • 此时文件还可继续修改或添加新的文件,后也要用add提交到索引中

  • 当前目录批量添加

git add .
  • 递归添加当前目录及其子目录所有文件
  • 只要是目录,就会递归添加该目录下的文件和子目录

查看状态

git status

git文件分类

  • tracked

  • 已经加入版本库的文件

  • untracked

  • 未加入到版本库的文件

  • ignored

  • 忽略的,git不再关注的文件

  • .gitignore

  • 此文件中的文件名、目录或格式,符合的文件,git会忽略

提交代码

git commit -m "1st commit"
  • 提交更改到版本库

  • -m

  • 填写本次日志消息

  • git的提交分为两个步骤:

  • 暂存变更:add作用是把新文件或文件新的改动添加到一个暂存区stage,也就是加入到index中

  • 提交变更:commit提交的时暂存区的改动,而不是物理文件目前的改动,提交到当前分支,默认时master分支

  • git commit index.htm

  • 省略add 直接提交

  • git commit -a

  • 把所有跟踪的文件的改动自动暂存,然后commit

增补

git commit --amend
  • 把补充的内容增补到上一次commit,不生成新的commit

查看日志

git log

查看差异

git diff
  • 查看被跟踪文件未暂存的修改,比较暂存区和工作区
git diff --cached
  • 查看被跟踪文件暂存的修改,比较暂存区和上一次commit的差异
git diff HEAD
  • 查看被跟踪文件,比较工作区和上一次commit的差异,HEAD指代最后一次commit

  • HEAD

  • 指代最后一次commit

  • HEAD^

  • 指代上一次提交

  • HEAD^^

  • 指代上上次提交

  • HEAD~n

  • 上n次提交

检出与重置

git checkout
  • 列出暂存区可以被检出的文件
git checkout file
  • 从暂存区检出到工作区,即覆盖工作区文件,可指定检出的文件。不清除stage
git checkout commit file
  • 检出某个commit的指定文件到暂存区和工作区
git checkout .
  • 检出暂存区的所有文件到工作区
git reset
  • 列出将被reset的文件
git reset file
  • 重置文件的暂存区,和上一次commit一致,工作去不影响
git reset --hard
  • 重置暂存区与工作区,与上一次commit保持一致
git reflog
  • 显示commit的信息,只要HEAD发生变化,就可以看到
git reset commit
  • 重置当前分支的HEAD为指定commit,同时重置暂存区,工作区不变
git reset --hard [commit]
  • 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区与指定commit一致

reset操作要慎重

移动和删除

git mv src dest
  • 直接把改名的改动放入暂存区
git rm file
  • 会同时在版本库和工作目录中删除文件
git rm --cached file
  • 将文件从暂存转成未暂存,从版本库中删除,但不删除工作目录的该文件,即文件恢复成不追踪状态

以上三个命令执行commit后才真正改动

push到服务器

  • 配置本地用户名和邮箱
git config --global user.name "lptnyy"
git config --global user.email "lptnyy@magedu.com"

内容存储在 ~/.gitconfig

关联远程版本库

git remote add origin http://name@IP:Port/name/gittest.git\
  • 习惯将远程版本库命名为origin,信息保存在.git/config的[remote "origin"]中
  • .git/config是版本库级别设置文件,具有最高优先级

推送数据

git push -u origin master
  • 第一次推送加-u,之后可不加

密钥登陆

ssh-keygen -t rsa -C "lptnyy@magedu.com"
  • 生成的公钥放到远程库选项中

克隆

  • 复制远程库的ssh地址
git clone git@IP:name/gittest.git

Pycharm中使用git

  • 初次使用没有project或close project后弹出此页面 选择git

项目开发

git stash
  • 暂时存储最后一次提交后的变化,放入栈中
git stash pop
  • 从栈中取出刚才保存的变化

  • 开发中,当前手中的工作没有完成,需要中断当前工作来完成其他请求,例如修复bug

  • 已完成的工作内容提交不合适,可能还要需要大量的调整,此时就需要stash存储未完成的工作

分支branch

  • 至少一个分支,称为主分支或主干分支Master,默认在主分支开发
创建分支
  • 分支名一般字符采用英文字母和-
  • 点击Pycharm最下面的version control
  • log页内选择要分支的点右键new branch
合并分支
  • 切换回master,检出master
  • 点击merge changes,选择no fast forward开始合并
fast forward合并

gitflow工作流
  • 最佳实践

  • 使用Git一般至少两个分支:master、develop

  • master,生产环境都来主干分支上拿数据部署,也可使用钩子自动完成

  • develop,开发分支,开发人员都是检出这个分支开发

  • 辅助分支

  • feature分支,具体功能开发分支,只与develop分支交互

  • release分支,发布版本

  • hotfix分支,紧急bug修复的版本,最后需要合并到develop和master中