git - 奇技淫巧

2020-03-21  本文已影响0人  sunyelw

本文收录git的一些用法,常用or不常用
PS: 都是命令行操作,对应IDE操作不做记录


一、远程覆盖本地

git reset origin/feature --hard

这其实是回退操作的一种变形,reset 可以指定提交也可以指定分支,还可以指定几次HEAD~[number]

二、rebase拉取

git pull --rebase

等价于

git fetch origin/[branch_name] & git merge origin/[branch_name]

可以设置为默认方式

git config --global pull.rebase true

三、rebase 变基

git checkout [branch1_name]

使 [branch1_name] 分支的提交基于 [branch2_name]

git rebase [branch2_name]


before

执行命令

git checkout feature-2 & git rebase master

变成


after

(图片来源git rebase 使用)

四、rebase 修改历史

git rebase -i HEAD~[number]

或指定一个提交进行rebase, 此提交之后的所有commit都会被编辑

git rebase -i [commit-id]

-i 交互式运行
这时候从上到下就是从早到晚,修改保存以后,git就会从上到下地执行。在这个界面内,你可以做一些事情,比如:

  1. 更换提交顺序 - 编辑器内移动提交顺序
  2. 合并某些提交 - f / s
  3. 拆分某些提交 - e
  4. 修改某些提交信息

五、提交合并

git rebase -i [commit-id]

各个命令释义


image.png

使用 sf 就可以将本次提交合并到前一次提交。

六、其他

实例1

下面看一个使用commit -p拆分单文件提交的例子

劝退警告!!

注意git命令只能拆分不连续的提交,并选择接收哪些提交;如果是连续的提交,需要人工修改文件后自行提交

首先看下提交信息


log

看下最新的提交内容


commit-2

进入交互模式

git rebase -i HEAD~2

注意, rebase 是不是不能编辑所有提交的,第一个提交是不能动的,也就是说,如果你只有两次提交,HEAD~2是不行的,最多HEAD~1

所以我们需要再来一次提交


commit-c

然后就可以编辑前两次提交了


rebase-before

把需要拆分的提交前面操作改成eedit

rebase-after

保存退出.


rebase-update

查看状态


rebase-status

可以看到,状态信息告诉我们,当前正在交互式rebase,当前命令是 e d415576,下一条是pick 5bb4450,说明rebase确实是从上而下的执行命令的

接下来我们开始拆分这次提交

  1. 首先撤销提交
git reset HEAD~1
reset-status

这时候你可以修改这次提交。

  1. 然后交互式(-p)提交
    commit -p
    commit -p -help

上图中明显只有一处连续修改,故再来改一下,加三行,如下


diff - add

到这一步,我们阐述一下我们的需求
总体流程是往一个文件a中添加了两次数据分别是

x0
x1
x2

b0
...
b6

现在需要把本次提交中的 x0 x1 x2 给剔除掉,那么我们继续

再执行一下commit -p

after-add -p

s选项了,那么就可以进行拆分了,git会将连续的部分视为一个提交

commit -p s
输入提交信息
commit-messag

查看一下git log

git - log

再看下目前数据


git - diff

发现x0-x2已经变成了修改而不是提交了,如果你还需要这些信息作为一个新的提交,那就可以执行

git commit -a -m "add x0-x2"

这里我们选择丢弃这部分修改继续rebase

cmd

其实上面过程可以非常简单,直接人工修改后多段提交,看个人习惯,肯定选择自己最熟悉最有把握的方式。对于我而言,以上操作纯属炫技~~~

如果是拆分一个提交的多个文件就更简单了,直接分段提交都不用commit -p

本例参考连接
git 奇技淫巧


最后在你实际环境中使用git的时候,不可避免的会遇到冲突,需要更多的技巧与能力来帮助你解决这些冲突,也可以借助一些IDE工具,比如 IDEA 的Git 工具用来解决冲突真的是我见过对用户最为友好的方式了。

未完待续~

上一篇 下一篇

猜你喜欢

热点阅读