在Git的使用过程中,每次完成代码修改过后,即需要将修改内容保存到本地的某个分支中,然后将其推送到远端分支中,而每一次的提交都将以一次commit的形式保存至分支中,使用人员既可以使用命令行进行提交内容的查看、编辑和修改,也可以在git的操作界面上进行相应的操作,同时也可以直接下载该提交下对应的所有代码内容,如下图所示,而本文主要是从命令行操作的角度来介绍Git的commit相关操作
在这里插入图片描述

(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 --amendgit 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 <test@36nu.com>
Date:   Fri Sep 22 20:55:38 2017 +0800
    add d.txt
commit 0fb295fe0e0276f0c81df61c4fd853b7a000bb5c
Author: test <test@36nu.com>
Date:   Fri Sep 22 20:32:45 2017 +0800
    add c.txt
commit 7753f40d892a8e0d14176a42f6e12ae0179a3210
Author: test <test@36nu.com>
Date:   Fri Sep 22 20:31:39 2017 +0800

假如要删除备注为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;
img
Step2: git rebase 进行 git 压缩
执行 git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作;
img

具体的操作下面的 Commands 说明得很清楚了,对于 commit 合并可以使用 squash、fixup 指令,区别是 squash 会将该 commit 的注释添加到上一个 commit 注释中,fixup 是放弃当前 commit 的注释;

img
编辑后保存退出,git 会自动压缩提交历史,如果有冲突,记得解决冲突后,使用 git rebase --continue 重新回到当前的 git 压缩过程;
img

Step3: 推送到远程仓库 git push -f
重新查看提交提交历史,会发现这些 commit 已经合并了,整个提交历史简洁了很多:
img

(6)推送到远端

①不设置跟踪
在这里插入图片描述
git push origin t6
②设置跟踪
git push --set-upstream origin 分支名
git push
在这里插入图片描述

③强制推送
git push -f
常用于变基,合并、删除、修改提交内容之时

1、简介在Git的使用过程中,每次完成代码修改过后,即需要将修改内容保存到本地的某个分支中,然后将其推送到远端分支中,而每一次的提交都将以一次commit的形式保存至分支中,使用人员既可以使用命令行进行提交内容的查看、编辑和修改,也可以在git的操作界面上进行相应的操作,同时也可以直接下载该提交下对应的所有代码内容,如下图所示,而本文主要是从命令行操作的角度来介绍Git的commit相关操作2、使用(1)提交在完成代码修改后,可以通过git status来查看代码变更的基本情况,也可以通过git   当你提交了代码,结果发现代码中还有的地方要改善,可以通过git commit --amend来追加提交,这样就可以避免生成两次提交   有以下两种情况: 1.如果还没有push到远程 git commit --amend // 修改上一次的提交 // 进入提交信息编辑界面 // 修改保存退出 2.已经push到远程了 git commit --amend // 修改上一次的提交 // 进入提交信息编辑界面 // 修改保存退出 // 强制推送 --> 如果使用--f git commit --amend 通过这个命令可以修改最新的commit提交。也就是指向当前 HEAD 的那次提交。但是,如果想修改的是倒数第二个commit提交,应该怎么办呢? git rebase 就像一块臭豆腐,没吃之前闻起来好臭,吃过以后发现“真香”。不过话说回来,git rebase 也算是 git 里边的高级操作了,下来我们就来看看怎么用它来修改倒数第二个 commit 吧! 任何东西都有个因果缘由,我写这篇博客的原因也.....
Git 中允许修改已经提交commit,包括最近一次提交以及最近多次提交修改最近多次提交比较复杂,以后会有介绍。本文主要是解释下开发过程中遇到频次比较高的修改最近一次提交amend命令。 从一个简单的例子入手。 # 初始化一个git项目 git init # 添加一个文件,并输入一些内容 vim a.txt 之后提交当前文件 git add . git commit -m "v1" 可以看到当前的状态,我这里使用了可视化的工具sourcetree 接着,比如我有做了一些调整,
刚刚完成commit,但发现有一个文件忘了加上,又不想为了这个文件重新commit,这时我们可以追加文件到最近一次的commit。 我们这里有一个名为Cinderella.html的文件,想把它加到最近的一次commit,先git add,然后使用下述命令。 git commit --amend --no-edit 如果是创建了一个空目录,再看一下状态,Git的状态没有发生改变 ,这是因为Git在计算产生对象的时候,是根据“文件内容进行计算的”。所以只是新增一个空目录,Git是无法处理的。 空的目录是无