Git commit合并操作 以及Reset参数理解

git cmd中文乱码解决:

git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8

多余多次commit 的合并

使用git log查看需要合并的commit
git rebase -i commitId
或者git rebase -i HEAD~1 修改倒数第1次的commit

其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着进入到 vi 的编辑模式

pick 要会执行这个 commit
squash 这个 commit 会被合并到前一个commit
reword 使用commit,但可编辑这条commit信息
edit 使用commit, 但停止正在执行的amend
fixup 类似squash, 但会丢弃这条commit信息
drop 移除commit

Git Reset 三种模式

reset --mixed 参数(默认)。
它的行为是:保留工作目录,并且清空暂存区。
工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。
简而言之,就是「把所有差异都混合(mixed)放在工作目录中」

--hard
重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区

--soft
重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致
因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。
所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

原文地址:https://www.cnblogs.com/donghaoblogs/p/12157186.html