文章目录
如何修改最新的commit的message
使用下面的命令即可
git commit --amend
–amend 不只是修改最新commit的message 而是会创建一个将暂存区的内容生成一个commit,再将当前最新的commit替换成新生成的那一个
如何修改老旧的commit的message
使用命令:
git rebase -i parent_commit_id
然后对要修改的message前的cmd改为reword,保存退出后修改message
其中, rebase -i 会产生分离头指针的状态。
因为:
git rebase工作的过程中,就是用了分离头指针。rebase意味着基于新base的commit来变更部分commits。它处理的时候,把HEAD指向base的commit,此时如果该commit没有对应branch,就处于分离头指针的状态,然后重新一个一个生成新的commit,当rebase创建完最后一个commit后,结束分离头状态,Git让变完基的分支名指向HEAD。
这里有一个思考就是rebase后面跟的是父commit的哈希值,那么第一个commit的message如何修改?
进一步学习可以参考
Git 提交的正确姿势:Commit message 编写指南
git 如何修改已经push 的commit 的信息
如何将连续的多个commit整理成一个
使用如下命令:
git rebase -i 开始commit [结束commit]
然后对要修改的message前的cmd改为squash
,保存退出后可以在new commit下加一句总体的commit message
在执行这个命令时
如果没有指定 结束commit,那么结束commit 默认为当前分支最新的 commit,那么rebase 结束后会自动更新当前分支指向的 commit, 如果指定了结束 commit,而且结束 commit不是当前分支最新的
commit,那么rebase 后会有生成一个 游离的 head,,而且当前分支指向的commit 不会更新
如何将间隔的多个的commit合并成一个commit
上面是将连续的多个commit 合并成一个,那么如何将不连续的多个间隔的commit合并成一个?
使用下面的命令:
git rebase -i 最靠前需要合并的commit的父commit_id,如果是第一个commit,那么直接就是第一个commit_id
然后将要合并的几条commit的message放到一起(紧挨着最靠前的需要合并的commit),且相关commit前的cmd改为squash
然后保存退出。
后面解决冲突后,先 git add,在git rebase --continue
比较暂存区与HEAD所指向的文件的差异
git diff --cached
比较工作区和暂存区所含文件的差异
git diff
git diff -- filename (中间为两个’-’)
将暂存区所有文件恢复为和HEAD所存文件一样
git reset HEAD
将工作区内容恢复为暂存区内容
git checkout
git checkout – filename
恢复暂存区部分文件为HEAD的一样
git reset HEAD – filename1 filename2
消除最近的几次提交
git reset --hard commit_id
看不同提交的指定文件的差异
git diff 分支1 分支2 – filename
git diff 分支1commit 分支2commit – filename
正确删除git仓库文件的方法
git rm filename
开发中临时加塞了紧急任务如何处理
先将手头上的暂存区的文件内容放到一边存起来,先去做紧急任务
先 git stash 将正在做的暂存区的内容存到stash中
然后干其他紧急任务
紧急任务完成后使用:
git stash apply : stash列表中的信息还在,可以反复使用
git stash pop : stash列表中的信息不在了
详情参见
git stash的详细讲解
指定不需要Git管理的文件
参考
忽略不需要提交的文件及文件夹
移除文件以及取消对文件的跟踪