git 删除分支和代码回滚
1. git 删除分支
本地分支删除
git branch -D branch
远程分支删除
git push origin :branch (origin 后面有空格)
2. 代码回滚
指的是将代码库某分支退回到以前的某个commit id
本地代码回滚
git reset --hard commit-id -->回滚到commit-id,将commit-id之后提交的commit都去除 或 git reset --hard HEAD~3 -->将最近3次的提交回滚
远程代码回滚
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤如下:
git checkout the_branch git pull git branch the_branch_backup //备份一下这个分支当前的情况 git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id git push origin :the_branch //删除远程 the_branch git push origin the_branch //用回滚后的本地分支重新建立远程分支 git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
git 删除远程文件或文件夹
git rm -r --cached a/2.txt //删除 a目录下的 2.txt 文件,删除 a目录: git rm -r --cached a git commit -m "删除a目录下的2.txt文件" git push
说明:
用 -r 参数删除目录, git rm --cached a.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用:git rm a.txt
git 切换远程分支
git clone 命令只能 clone 远程仓库的 master 分支,无法 clone 所有分支,想要 clone 之后切换到想要的分支上的解决办法如下:
1. 进入或者创建一个干净的目录,假设为 javaProjects
2. cd javaProjects
3. git clone http://github.com/elastic/elastisearch.git,这样在 javaProjects 目录下得到一个 elasticsearch 子目录
4. cd elasticsearch
5. git branch -a ,含义是列出所有分支的名称
6. git checkout -b dev origin/dev, 作用是 checkout 远程仓库的 dev 分支,在本地起名为 dev 分支,并切换到本地的 dev 分支上(这个命令很重要)
git 分支查看和切换
本地分支查看
git branch
远程分支查看
git branch -a
分支切换(从当前分支切换到分支 test)
git branch test
git 拉取远程分支(本地不存在该分支)
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
git 代码合并
1. 假设当前分支为 test,你修改完一个文件后提交到本地和远程
git commit -m 'fix ik tokens query bug' git push
2. 切换到 master 分支,更新 master 上最新代码到本地
git checkout master git pull
3. 切换回 test 分支,并合并刚才你下载最新 master 的本地分支 : git merge master
git checkout test git merge master
git 状态查询
1. 当前状态查询
git status
2. 查看某个具体文件的修改内容
git diff apps/search/travelnote/facade/CommonUtil.php
3. 查看历史提交记录
git log