【Git】Git常见场景和问题解决的命令

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

如何修改最新的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管理的文件

参考
忽略不需要提交的文件及文件夹
移除文件以及取消对文件的跟踪

Git命令行大全网址

https://gist.github.com/guweigang/9848271

猜你喜欢

转载自blog.csdn.net/qq_42322103/article/details/95198902