1、 git 拉项目
#在自己的工作区,通过git bash
1、git clone url(gitlab上项目的url) 从gitlab上clone下项目
#进入该项目clone的目录
2、git branch -a (查看当前项目) 所有的分支
2、 git 回滚项目
#打印日志
1、git log
#回滚到指定的版本(e377f60e28c8b84158 回滚到的版本)
2、git reset --hard e377f60e28c8b84158
#或
git revert HEAD(e377f60e28c8b84158)
#强制提交
3、git push -f origin master
#或
git push --set-upstream origin test_branch
3、 git 提交到分支
git push origin pu_branch(分支名)
4、 git 切换分支
git checkout 具体的branch名字 切换到对应的分支
5、合并分支
#查看各个分支情况
git log --oneline --decorate --graph --all
git log --oneline --decorate
将分支 test_branch 的代码合并到 pu_branch
#切换分支
1、git checkout pu_branch
#合并代码
2、git merge test_branch
# --commit参数使得合并后产生一个合并结果的commit节点。该参数可以覆盖--no-commit。
# --no-commit参数使得合并后,为了防止合并失败并不自动提交,能够给使用者一个机会在提交前审视和修改合并结果。
# --edit和-e用于在成功合并、提交前调用编辑器来进一步编辑自动生成的合并信息。因此使用者能够进一步解释和判断合并的结果。
# --no-edit参数能够用于接受自动合并的信息(通常情况下并不鼓励这样做)。
git merge --no-edit test_branch
6、git rebase
rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去,采用rebase的方式进行分支合并,整个master分支并没有多出一个新的commit。
#切换到bugFix分支
1、git checkout bugFix
#提交一次(提交在bugFix分支上)
2、git commit - m "标志"
#使用git rebase把 bugFix 分支里的工作直接移到 master 分支上(移动以后会使得两个分支
#的功能看起来像是按顺序开发,但实际上它们是并行开发的。
3、git rebase master
#注意:提交记录 C3 依然存在(树上那个半透明的节点),而 C3是我们 Rebase 到 master 分支上的 C3 的副本。
#切换到master分支上(为了进行更新master的操作)
4、git checkout master
#把master的 rebase 到 bugFix 分支上(由于 bugFix 继承自 master,所以 git 只是简单的把
#master 分支的引用向前移动了一下而已。)
5、git merge bugFix
git checkout master
git pull
git checkout local
git rebase -i HEAD~2 //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge local
git push
- git merge 操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式
- git rebase 操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性
常用指令
git rebase -I dev 可以将dev分支合并到当前分支
这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等。
git rebase –abort 放弃一次合并
合并多次commit操作:
1 git rebase -i dev
2 修改最后几次commit记录中的pick 为squash
3 保存退出,弹出修改文件,修改commit记录再次保存退出(删除多余的change-id 只保留一个)
4 git add .
5 git rebase --continue
7、误删之后恢复
1、git log --oneline --decorate --graph --all
#当我们是丢掉了我们第二次的提交,没有办法找回来了。但是 reflog 就是用来解决这个问
#题的。简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的
#时候,这些操作会被记录在reflog中
2、git reflog
#所以,我们要找回我们第二commit,只需要做如下操作:
3、git reset --hard 98abc5a
8、删除具体某个提交commit的方法
git revert b7231c0
或者
git revert b7231c0 -m 1
或者
git rebase -i 38d60623
- 将#2这一行前面的pick改为drop,然后按"shift" + ":", 在输入“wq”保存退出
至此已经删除了指定的commit,可以使用git log查看下 - git push origin HEAD --force 然后推送到远程仓库
此时 commit_B 就被干掉了,没有影响后面的提交
9、查看/修改自己的用户名和邮箱地址
#查看
$ git config user.name
$ git config user.email
#修改
$ git config --global user.name "xxx"
$ git config --global user.email "xxx"
8、查看配置命令
#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global --list
#查看当前仓库配置信息
git config --local --list
9、同步和删除远程分支
- 同步:
git fetch -p
- git 删除本地分支
git branch -D br
- git 删除远程分支
git push origin :br (origin 后面有空格)
10、提示
# 显示每次修改的文件列表及修改状态
git log --name-status
# 显示每次修改的文件列表
git log --name-only
# 显示每次修改的文件列表及文件修改的统计
git log --stat
# 显示每次修改的文件列表
git whatchanged
# 显示每次修改的文件列表及统计信息
git whatchanged --stat
# 显示最后一次的文件改变的具体内容
git show
参看文章:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
网友评论