1、简介
在Git的使用过程中,每次完成代码修改过后,即需要将修改内容保存到本地的某个分支中,然后将其推送到远端分支中,而每一次的提交都将以一次commit的形式保存至分支中,使用人员既可以使用命令行进行提交内容的查看、编辑和修改,也可以在git的操作界面上进行相应的操作,同时也可以直接下载该提交下对应的所有代码内容,如下图所示,而本文主要是从命令行操作的角度来介绍Git的commit相关操作
2、使用
(1)提交
在完成代码修改后,可以通过git status
来查看代码变更的基本情况,也可以通过git diff
来查看变更文件的详细更改内容,当确认无误后,可以通过git add .
来添加待提交的所有内容,也可以选择若干个文件git add filename
来添加某个文件,当提交完毕过后,可以通过git commit -m "comment"
来完成内容的提交,使得提交内容进入本地分支,当提交提示内容较长时,可以打开vim编辑器进行内容的增加,git commit
即可打开vim编辑器,内容添加完毕之后保存退出
下图为Git的工作路径说明,Project为本地文件(也成为工作区),可通过git add
添加到暂存区中,通过git commit
添加到版本库中(本地分支中),通过git push
添加到远端分支中,通过git pull
可将远端分支上的内容拉取到本地分支上
(2)查看
当我们为借助git add
将文件添加到暂存区时,可以通过git diff
(git diff 文件名
)来查看本次提交内容中的所有(某些)文件的变更内容,当我们已经通过git commit
将变更内容添加到版本库之后,可以借助git show 版本id
来查看本版本下的变更内容
(3)修改
①修改提交信息
场景一:修改最新commit的提交信息
git commit --amend
,进入commit编辑界面,编辑后保存即可
场景二:修改前n次commit的提交信息
假设你需要修改倒数第n次commit的提交信息
$ git rebase -i HEAD~n
# 进入编辑模式,会出现类似以下的内容
pick 6608e22 修改代码结构调整导致不能正常显示的问题
pick 1d381cd 菜单切换可用
...
# 将需要修改的commit的那一行的pick修改为edit,然后保存退出
# 然后输入
$ git commit --amend
# 进入你需要修改的commit编辑界面,编辑后保存退出
# 修改结束后,输入以下命令返回到最新的commit
$ git rebase --continue
注意,你要修改几个commit,就要执行几次git commit --amend
与git rebase --continue
操作
②修改提交内容
step1:将当前分支无关的工作状态进行暂存
git stash
step2:将HEAD移动到需要修改的commit上
git rebase eb69bff96^ --interactive
step3:找到需要修改的 commit ,将首行的 pick
改成 edit
后保存
step4:开始修改文件内容
step5:将改动文件添加到残存
git add
step6:追加改动到提交
git commit --amend
step7:移动HEAD 回到最新的commit
git rebase --continue
step8:恢复之前的工作状态
git stash pop
(4)删除
例如我的提交历史如下
commit 58211e7a5da5e74171e90d8b90b2f00881a48d3a
Author: test <[email protected]>
Date: Fri Sep 22 20:55:38 2017 +0800
add d.txt
commit 0fb295fe0e0276f0c81df61c4fd853b7a000bb5c
Author: test <[email protected]>
Date: Fri Sep 22 20:32:45 2017 +0800
add c.txt
commit 7753f40d892a8e0d14176a42f6e12ae0179a3210
Author: test <[email protected]>
Date: Fri Sep 22 20:31:39 2017 +0800
init
假如要删除备注为add c.txt
commit为0fb295fe0e0276f0c81df61c4fd853b7a000bb5c
的这次提交
step1. 首先找到此次提交之前的一次提交的commit7753f40d892a8e0d14176a42f6e12ae0179a3210
step2. 执行如下命令
git rebase -i 7753f40
弹出如下界面(原图丢失,下图类似)
step3. 将0fb295f
这一行前面的pick改为drop,然后按照提示保存退出
step4. 至此已经删除了指定的commit,可以使用git log
查看下
(5)合并
有时候在一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱,此时可以将一部分的 commit 合并为一个 commit,以美化整个 commit 历史,可以使用 rebase 的方法来合并多次 commit,主要步骤如下:
Step1:git log 查看当前的提交历史
比如需要将以下 3 个 ”请假应用客户端代码优化“ 的 commit 合并为一个 commit;
Step2: git rebase 进行 git 压缩
执行 git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作;
具体的操作下面的 Commands 说明得很清楚了,对于 commit 合并可以使用 squash、fixup 指令,区别是 squash 会将该 commit 的注释添加到上一个 commit 注释中,fixup 是放弃当前 commit 的注释;
编辑后保存退出,git 会自动压缩提交历史,如果有冲突,记得解决冲突后,使用 git rebase --continue 重新回到当前的 git 压缩过程;
Step3: 推送到远程仓库 git push -f
重新查看提交提交历史,会发现这些 commit 已经合并了,整个提交历史简洁了很多:
(6)推送到远端
①不设置跟踪
git push origin t6
②设置跟踪
git push --set-upstream origin 分支名
git push
③强制推送
git push -f
常用于变基,合并、删除、修改提交内容之时