1.git hooks
Git Hooks 就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本。
按照Git Hooks脚本所在的位置可以分为两类:
1.本地Hooks,触发事件如commit、merge等
2.服务端Hooks,触发事件如receive等
2.Git Hooks能干什么
gitHooks是定制化的脚本程序,所以它实现的功能与相应的git动作相关,在实际工作中,GitHooks还是相对比较万能的:
- pre-commit:检查每次的commit message是否有拼写错误,是否符合某种规范
- pre-receive:统一上传到远程仓库的代码编码
- post-commit:每当有新的提交的时候就通知项目成员
- post-receive:将代码推送到生产环境
Git Hooks是如何工作的
每个Git repo 下都含有.git/hooks
这个目录(本地和远程都是一样的),这里面放置Hooks的地方
3.git 修改之前的commit信息
3.修改最后一次注释内容
如果你只想修改最后一次注释(就是最新的一次提交),那好办:
git commit --amend
出现有注释的界面(你的注释应该显示在第一行), 输入i进入修改模式,修改好注释后,按Esc键 退出编辑模式,输入:wq保存并退出。ok,修改完成。
修改之前的注释
修改之前的某次注释
- 输入:
git rebase -i HEAD~2
最后的数字2指的是显示到倒数第几次 比如这个输入的2就会显示倒数的两次注释(最上面两行)
-
你想修改哪条注释 就把哪条注释前面的
pick换成edit。方法就是上面说的编辑方式:i---编辑,把pick换成edit---Esc---:wq. -
然后:(接下来的步骤Terminal会提示)
git commit --amend -
修改注释,保存并退出后,输入:
git rebase --continue
其实这个原理我的理解就是先版本回退到你想修改的某次版本,然后修改当前的commit注释,然后再回到本地最新的版本
修改之前的某几次注释
修改多次的注释其实步骤和上面的一样,不同点在于:
- 同上
- 你可以将多个想修改的commit注释前面的
pick换成edit - 依次修改你的注释(顺序是从旧到新),Terminal基本都会提示你接下来的操作,每修改一个注释都要重复上面的3和4步,直到修改完你所选择的所有注释
已经将代码push到远程仓库
首先,你把最新的版本从远程仓库先pull下来,修改的方法都如上,最后修改完成后,强制push到远程仓库:
git push --force origin master
**注:很重要的一点是,你最好保证在你强制push之前没有人提交代码,如果在你push之前有人提交了新的代码到远程仓库,然后你又强制push,那么会被你的强制更新覆盖!!!
**
4. GIT撤销操作
git commit --amend 撤销上一次提交 并讲暂存区文件重新提交
git checkout -- <file> 拉取暂存区文件 并将其替换成工作区文件
git reset HEAD -- <file> 拉取最近一次提交到版本库的文件到暂存区 改操作不影响工作区
git reset --hard HEAD 撤销到该commit
git revert HEAD 撤销到该commit
撤销文件的修改
git log --oneline
git reset <HEAD> -- <file>
git status
git checkout -- <file>
5. git push 错误failed to push some refs to 解决办法
原因:
当我们在git版本库中发现一个问题后,如你在git上对它进行了在线修改,但是没有对本地库进行同步(做到push前,都要先pull代码的习惯,就可以保证本地库和远程库代码一致)。这个时候,你再次commit,想把本地库代码提交到远程git库中,就回出现push失败的问题。
解决:
5.1
根本原因就是远程仓库与本地仓库代码不一致导致的,我们只需要把远程仓库同步到本地仓库即可:git pull --rebase origin master
指令的意思就是把远程仓库中的更新合并到本地库中(可能存在冲突需要解决)--rebase 的作用是取消本地库中刚刚提交的commit,并把它们接到更新后的版本仓库中
5.2
或者使用如下命令,将commit的代码撤回,然后git pull
git reset --soft HEAD^
6. git stash 用法总结
git stash save "xxx" // 执行存储时,添加备注,方便查找
git stash list //查看stash 了哪些存储
git stash show //显示做了哪些改动,默认show第一个存储,如果想用显示其他的,git stash show stash@{1}显示第二个
git stash show -p // 显示第一个存储的改动, git stash show stash@{1} -p
git stash apply // 应用某个存储,但是不回把存储从存储列表中删除,默认使用第一个 git stash apply stash@{1}
git stash pop // 命令恢复之前缓存的工作目录,并将缓存堆栈中的对用stash删除 git stash pop stash@{1}
git stash drop stash@{num}// 丢弃stash 从列表中删除这个存储
git stash clear // 删除所有的缓存的stash
7. git rm 和 git rm --cached 区别
当需要删除暂存区或分支上文件,同时工作区不需要这个文件
git rm filename
当需要删除暂存区或分支上的文件,同时工作区需要这个文件,但是需要被版本控制
git rm --cache filename
# 后面添加进.gitignore文件中的文件可以使用这条命令解除版本控制的追踪,然后在commit上忽略这个文件。
8.删除具体某个commit方法
git log // 获取commit的信息
git rebase -i (commit_id) // commit_id 为删除的commit的上一个commit号;
编辑文件,将要删除的commit之前的 pick 修改为drop
按照提示保存文件退出
git push origin 分支 --force
通过这种方式就可以删除某一次的commit并且不会影响到之后的commit
8.修改某次提交记录/某次提交人的信息
-
git rebase -i HEAD~N, 如git rebase -i HEAD~5, 显示历史的前5个提交记录 -
将要修改的提交的 pick 改成 edit :
-
:wq保存退出 -
git commit --amend --reset-author, 在操作页面,:wq保存退出 -
git rebase --continue回到正常状态 -
git rebase --abort放弃本义修改
如果你只需要修改最新的 commit ,直接使用:
git commit --amend --author="Author Name <email@address.com>"
复制代码
如果你已经修改了 git config 中的用户名和邮箱,也可以使用
git commit --amend --reset-author --no-edit
作者:sjfkai
链接:juejin.cn/post/684490…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。