git rebase -i [startpoint] [endpoint]
: 合并 startpoint 到 endpoint 之间的 commit log- i 的意思是 --interactive, 即弹出交互式的界面让用户编辑完成合并操作
- startpoint: 开始的commit-id,合并的时候不包含此记录
- endpoint:如果不指定,则该区间的终点默认是当前分支HEAD所指向的commit
- 此时会进入 vim 的交互界面:按
i
切换到编辑模式 - 使用 Squash 策略进行合并:第一个为 p,其余为 s
p ... ...
s ... ...
s ... ...
s ... ...
- 按
Esc
切换到底线命令模式 - 按
:wq
保存并退出 - 此时会进入 commit message 的编辑界面
- 按
i
切换到编辑模式 - 将之前的 commit message 修改成合并后的新的 commit message
- 按
Esc
切换到底线命令模式 - 按
:wq
保存并退出 git push -f origin
:强制推送到远程
- 定义:不合并一个分支所有的 commit, 只合并想要的 commit
- 方法:
git cherry-pic <commit-id>
- git reset:
git reset <commit-id>
- 将提交记录回退到指定的 commit-id 上
- 然后
git checkout
撤销修改 - 最后
git push -f origin
:强制推送到远程
- git revert:
git revert <commit-id>
: 新建一条 commit, 撤回之前 commit-id 的修改
对于个人的 feature 分支而言,可以使用 git reset 来回退历史记录,之后使用 git push --force 进行推送到远程,但是如果是在多人协作的集成分支上,不推荐直接使用 git reset 命令,而是使用更加安全的 git revert 命令进行撤回提交。这样,提交的历史记录不会被抹去,可以安全的进行撤回。
git stash save <message>
: 在暂存文件的时候,添加暂存备注git stash list
: 查看所有 stashgit stash apply <num>
: 恢复第 num 个暂存,不会把 stash 记录从 stash list 中删除git stash pop
: 恢复最近一次的 stash, 并把这条 stash 记录从 stash list 中删除git stash clear
: 删除 stash list 里所有的 stash 记录
git checkout <filename>
: 撤销某个文件的修改git checkout <file>
: 撤销整个文件夹的修改git reset <filename> || <file>
: 撤销暂存区(已经 git add)的修改
git config --global alias.<简化的字符> <原始命令>
vim ~/.gitconfig
: 查看全局的 git 配置
git config --global alias.ad add
// 我的配置
ad = add
co = commit
pl = pull
co = checkout
me = merge
br = branch
st = status