Git已经成为企业协同开发必不可少的工具了。
简单记录下
1、配置
# 生成公钥
ssh-keygen -t rsa -C "your_email@youremail.com"
# 初始化
git init;
# 自报家门
git config --global user.name "yourname"
git config --global user.email "your_email@youemail.com"
# 克隆到本地
git clone "git.git"
# 添加远程连接
git remote add origin "git.git"
2、提交流程
# 远程仓库commit拉取到本地(更新)
git pull
# 将工作区所有修改/新增加入到暂存区 --all 如果文件有删除 也会提交
git add --all .
# 将暂存区代码提交到工作区
git commit -m "one commit"
# 本地commit推送到远程仓库(推送)
git push
3、分支管理
# 本地分支
git branch
# 分支名称:新增一个新的分支
# -u origin/分支名称:可以让当前本地分支track(追踪)某个指定的远程分支
# -vv:查看每个本地分支track的远程分支
# -d:删除本地分支
# -D:删除远程分支
# 将分支代码合并到当前所在分支上去
git merge 分支名称
# 切换分支
git checkout
# 分支名称:切换到该分支
# -b 分支名称:创建并切换到该分支
#-b 分支名称 origin/分支名称:将本地获取到一个分支跟origin/分支名称 关联起来
# 让本地和远程保持同步(同时拉取下来所有最新的远程分支)
git fetch origin
# 推送数据
git push
# -u origin 分支名称:将本地分支推送到远程仓库,默认分支名称一般为master
# origin --delete 分支名称:删除远程分支
# 加tag
git tag
# V1.0:轻量级的tag
# -a v1.0 -m "test tag":重量级的tag
4、版本
4.1、日志
# 查看提交日志
git log
# --patch -n:可以显示每次提交之间的diff,-n是查看近n次
# --stat:展示每次commit的统计信息,包括修改,删除,新增等
# --pretty=oneline:每个commit展示一行,美观的展示
# --oneline:只展示一行
# --graph:显示图像化的commit历史
# --decorate --graph --all:可以打印出整颗commit树,同时告诉你各个分支当前指向哪个commit object
# --oneline --abbrev-commit --graph:这是最有用的,可以看到整个commit树结构,包括如何合并的
4.2、版本回退
# 回退版本
git reset
# --hard HEAD^:回退到前几个版本(^)
# --hard HEAD~5:回退到前5个版本
# --hard d324644:回退到指定的commit
# git reset 只能查看当前HEAD之前的commit
4.3、其他
# 查看所有分支的操作记录(包括已删除和commit和reset操作)
git reflog
# 查看当前指向
git show
# HEAD^^:查看上几个版本的commit
# HEAD~5:查看上五个版本的commit
5、其他命令
# rebase:变基,就是改变commit之前依赖的基础commit
git pull --rebase
# 基于之前的commit 重新构建提交历史
git rebase --onto 622e88 9c68fdc
6、高阶命令
6.1、比较差异
# 比较分支差异
git log --abbrev-commit 分支1..分支2
# 比较commit差异
git diff # 工作区和暂存区的差异
# --cached: 暂存区和仓库的差异
# HEAD:工作区和仓库的差异
# 分支1 分支2:两个分支之间的差异
# HEAD HEAD^:最近两次提交的差异
6.2、暂存未提交代码
# 添加到暂存列表
git stash
# list:查看暂存列表
# apply stash@{0}:恢复到指定的一次stash
# apply:恢复暂存代码
# drop stash: 删除某个stash
# -m: 暂存区添加备注
6.3、修改commit
# 操作暂存区
git add -i
# 进入交互模式
# 2:update 放入暂存区
# 3:revert 从暂存区里挪出来
# 7:quit 退出交互模式
# 修改commit提交历史
git commit --amend # 说白了就是将上一个commit删掉,重新提交,重新提交代码自然会将暂存区的代码提交
# 修改多次commit历史记录
git rebase -i
# HEAD~3:获取三次提交的commit值 将对应版本的pick改成edit 然后就回到了最早的edit版本,使用git commit --amend修改
# 然后就回到了最早的edit版本,使用git commit --amend修改
# 最后一次git rebase --continue就说明完成了所有修改
# 编辑模式也能 删除、合并、切分 commit
# 常用:pick:提交 edit:修改commit squash:合并commit到上一个commit
6.4、撤回
# 合并分支出现冲突 还原到未合并的状态
git merge --abort
# 远程仓库撤回commit
git revert HEAD # 回到了上一个commit的状态
git push origin master # 同步撤回远程仓库的commit操作
# 撤回远程分支merge
git revert -m 1 HEAD
git push origin master
# 撤回merge会导致下次合并无法合并merge内容 需进行特殊处理,再撤回到merge的版本,才能找回merge内容 (不建议使用)