Git commit (amend)
原文链接:
https://www.cnblogs.com/qianqiannian/p/6005628.html
https://www.jianshu.com/p/a8a2ac58f37d
https://www.jianshu.com/p/c9db76c2936e
--------------------------------------------------------------------------------------------------------------------
git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,
commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里.
1.1 git commit -m “message”
这种是比较常见的用法,-m 参数表示可以直接输入后面的“message”,如果不加 -m参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message,
message即是我们用来简要说明这次提交的语句。还有另外一种方法,当我们想要提交的message很长或者我们想描述的更清楚更简洁明了一点,我们可以使用这样的格式,如下:
git commit -m ‘
message1
message2
message3
’
1.2 git commit -a -m “massage”
其他功能如-m参数,加的-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区,注意,
新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用-a参数,正常的提交还是使用git add先将要改动的文件添加到暂存区,再用git commit 提交到本地版本库。
1.3 git commit --amend
比方说,你的代码已经提交到git库,leader审核的时候发现有个Java文件代码有点问题,于是让你修改,通常有2种方法:
方法1:leader 将你提交的所有代码 abandon掉,然后你 git reset … 将代码回退到你代码提交之前的版本,然后你修改出问题的Java文件,然后 git add xx.java xxx.java -s -m “Porject : 1.修改bug…” ,最后通过 git push origin HEAD:refs/for/branches 上传代码。
方法2:在代码没被merge之前我们希望再修改一版满意的,而如果我们不想在服务器上abondon,那么我们怎么做呢?
leader不abandon代码,你回去之后,修改出问题的Java文件,修改好之后,git add 该出问题.java
然后 git commit –amend –no-edit, (在执行git commit --amend --no-edit
之后,hash ID值发生了改变,但是message内容并没有发生变化,并且最重要的是只有一条commit记录。如果要修改上一条的message,那么去掉--no-edit
选项即可,git commit --amend -m "xxxx"
。同理,commit记录同样只会有一条。)
最后 git push origin HEAD:refs/for/branches 上传修改。
git commit --amend :也叫追加提交,它可以在不增加一个新的 commit-id 的情况下将新修改的代码追加到前一次的commit-id中,
(1) 假如现在版本库里最近的一版正是我们想要追加进去的那版,此时是最简单的,直接修改工作区代码,然后git add,之后就可以直接进行git push到服务器,中间不需要进行其他的操作如git pull等
(2) 如果现在版本库里最近的一版不是我们想要追加进去的那版,那么此时我们需要将版本库里的版本回退到我们想要追加的那一版,想要将版本回退到我们想要的那一版有好几种方法:
1)常用: 如果我们不知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以使用git log来查看版本库中的commit-id,找到我们需要的commit-id后,在终端中执行git reset --hard commit-id,运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push.
2) 本人常用: 如果我们知道我们需要的版本与现在最新的版本中间隔着 n 个提交,那么我们可以直接使用 git reset --hard HEAD~n 命令,关于git reset 命令有详解,此时这个命令执行完后,运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本 git commit --amend 命令,之后 git push.
2) 第一种即是我们从服务器上选取我们需要的版本,直接进行挑拣,在服务器的提交管理页面上右上方一般会有一个Download按钮,点击会弹出一个下拉框,选择其中的cherry-pick,复制命令,之后在我们版本仓库对应的目录下运行这个命令,执行完后,使用git log -1 命令,可以查看到现在版本库里最近的一版变成了我们刚才挑拣的这版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push.
3) 使用gitk或其他的图形界面化工具,在终端输入 gitk,回车,会弹出gitk的图形界面,在界面的左侧部分陈列着版本库中的一条条commit-id,此时选中我们需要的那一版,右键点击之后会弹出一个选择菜单,如果是在master 分支上,那么其中会有一项是 Reset master branch to here,点击这项,会弹出一个名为confirm reset的确认box,选择reset type 中的hard项,再点击OK,关闭gitk图形界面,回到终端,运行git log -1命令,发现现在版本库里最近的一次提交已经是我们希望的那一版了,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push.
1.4 git commit --help
查看帮助,还有许多参数有其他效果,一般来说了解上述三种即可满足我们工作中的日常开发了
Git commit (amend)相关推荐
- Git笔记(三)git commit撤销
Git笔记(三)git commit撤销 1.git commit撤销 1.git commit撤销 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m &qu ...
- Git笔记(31) 重置揭密
Git笔记(31) 重置揭密 1. 三棵树 1.1. HEAD 1.2. 索引 1.3. 工作目录 2. 工作流程 3. 重置 3.1. 移动 HEAD(--soft) 3.2. 更新索引(--mix ...
- Git笔记(7) 撤消操作
Git笔记(7) 撤消操作 1. 重新提交 2. 撤消对文件的修改 3. 取消暂存文件 1. 重新提交 有时候经常提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了 此时,可以运行带有 --am ...
- 深入浅出Git教程(转载)
目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式版本控制 1.5 ...
- Git连载(9)使用Eclipse作为Git客户端
2019独角兽企业重金招聘Python工程师标准>>> 1.8.12 使用Eclipse作为Git客户端 最新的Eclipse IDE for Java EE Developers( ...
- Git学习(一)git服务器的简易搭建
Git学习(一)git服务器的简易搭建 使用环境:docker容器模拟的3个ubuntu14.04的系统 分别模拟了3个系统: Ubuntu_gitserver:14.04 用于git服务器的安装 ...
- Git笔记(37) 替换
Git笔记(37) 替换 1. 替换 2. 举例 1. 替换 之前强调过,Git 对象数据库中的对象是不可改变的 然而 Git 提供了一种有趣的方式来用其他对象 假装 替换数据库中的 Git 对象 r ...
- Git笔记(36) 打包
Git笔记(36) 打包 1. 打包 2. 举例 1. 打包 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等) 但还有另外一种不太常见却又十分有用的方式 Git 可以将它 ...
- Git笔记(34) 调试
Git笔记(34) 调试 1. 文件标注 2. 二分查找 1. 文件标注 如果在追踪代码中的一个 bug,并且想知道是什么时候以及为何会引入 文件标注通常是最好用的工具 它能 显示任何文件中每行最后一 ...
最新文章
- 中科院计算所关于“木兰”语言问题处理情况说明
- SpringBoot集成多数据源
- centos 怎样显示metric_centos7系列问题
- 我的XX游戏面试之旅
- Access(JET-SQL)问题集锦
- Java语言中:switch语句经典习题
- 服务端端口状态和客户端端口状态解释-LISTENING-ESTABLISHED-TIME_WAIT
- 解决webpack5打包html中图片后图片无法显示问题
- 对vue的 v-for 循环中添加属性的方法的研究
- SPSS对数据进行相关性和显著性分析
- 计算机科学中的抽象包括数据抽象和,抽象化 (计算机科学)
- 创业公社:亦庄分中心开业 借好创业东风
- 申报须知,2022年滁州市各区县高新技术企业奖励政策变化,明光市
- 记录下UE4解决EQS Bug的过程
- 周志华 《机器学习初步》 绪论
- 巴比伦没有春夏秋冬,哪来四季历法?
- 手机电脑维修管理系统
- 分享冲压模具设计与制造的冲压模具材料
- 【IoT】产品设计之品牌、LOGO和VI是什么?
- Scala崛起带来招聘爆发
热门文章
- 【Android--项目构建失败原因及解决】
- NFS搭建错误处理:exportfs:No options for /home/source/*(rw,sync,no_root_squash):suggest(sync) to avoid warn
- 美颜sdk算法总概——美白
- 设备扩展(DEVICE_EXTENSION)
- pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算
- android原生相机apk,原生模式相机APP
- 用户体验思考与flex三坑:元素不均分、溢出不省略和垂直不滚动
- web服务器推送技术
- 水星mw310r虚拟服务器,水星MW310R(V1-V4)路由器桥接设置教程 | 192路由网
- 使用turtle 绘制正方形和圆