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中