撤销
- 查看log
git log
找到要撤销的commit id - 撤销后并还原文件
git reset --hard commit id
这里的commit id是要撤销的id的前一个,就是要撤销到哪一个commit - 撤销后可以再次提交
git reset commit id
这里的id同 2 - 撤销任意一个commit
git revert commit id
撤销远程的
- 如果是最近的一个commit,先本地撤销后,然后强制推送
git push origin master --force
就可以了 - 如果是任意一个commit,这个除了新建分支使用cherry-pick来解决之外,最简单的方式是
git rebase
。rebase命令可是使用对commit进行编排(删除,修改),具体的可以参考这篇文章
忽略某个文件
- 临时的忽略一个文件,比如在vue项目中生成的index.html文件每次都会有变动,但是并不是每次都想提交,如果不想再提交的时候看到这个文件,我们可以使用update-index命令
a. git update-index --assume-unchanged <file>
b. git update-index --no-assume-unchanged <file>
避免pull出现Merge branch 'master' of xxx
, 有3种方法
- git pull --rebase 这个会先撤销本地的所有commit, pull最新的代码,然后在新的代码上应用所有的本地commit,如果出现conflict,你可以手动merge,然后执行git rebase --continue
- 在.git/config中配置每次pull都rebase
[branch "master"]
rebase = true
cli配置 git config branch.master.rebase true
- 全局配置
[branch]
autosetuprebase = always
cli配置git config --global branch.autosetuprebase always
创建本地中心仓库/裸仓库bare
git init --bare project.git
一般用来做远端中心仓库或者本地演示git命令
tag
- 添加
git tag -a 0.1.3 <SHA值> -m “Release version 0.1.3
- 删除
git tag -d 0.1.3
- 推送到仓库
git push origin --tags
- 删除仓库
git push origin :refs/tags/0.1.3
- 搜索标签
git tag -l 1.*.*
*
星号匹配对于的位置
清除多余的文件
git clean -n # 查看将要被删除的文件,不做真正的删除
git clean -f # 执行删除
git clean -f -d # 删除目录
git clean -f -X # 删除ignored文件
merge
git merge --squash branch # 合并只生成一个commit
删除分支
git push -d origin branch1 # 删除远程分支
git branch --delete --remotes origin branch1 # 删除远程分支的本地跟踪
git branch -dr origin branch1 # 上面的缩写
git branch -D branch1 # 删除本地分支
输出history
具体format参数参考这里
git log --format="%H %B" => 872acd6b45102a36b06ac9c7e8b4977b84025205 修改
git log --oneline => 0751fe6 fixbug
git log --pretty=format:"%h - %an, %ar : %s"
=> d309e46 - auther, 3 days ago : fixbug
获取当前分支
git symbolic-ref --short -q HEAD
合并多个commit
git rebase -i commitid #需要合并的commitid 起始位置
在rebase界面把需要合并的commit改成s或者square,但是需要保留一个起始位置
编辑第一个commit
git rebase -i --root
实际问题
- 在配合其他IC(比如jenkins)使用webhook时,有时为了测试需要触发push event。
1. git commit --amend --no-edit # 修改最后一次提交,但是不做修改
2. git push -f # 强制推送就能在不新增commit的情况下出发push
- git在win下是默认不区分大小的,如果你的代码需要在linux环境下编译。最好修改这个设置,让git区分大小写。
git config core.ignorecase false
遇到的问题
-
git unknown option: -encodedCommand
在power shell使用git stash drop stash@{0}报错,换用git bash就ok了。 -
HEAD detached at c8f55e2
使用git checkout master
可以回到master分支 - 调试jenkins的时候想触发push事件,但是又不想修改提交内容,可以使用
git commit --amend --no-edit
产生新的hash提交就行。