美文网首页
git - 奇技淫巧

git - 奇技淫巧

作者: sunyelw | 来源:发表于2020-03-21 11:17 被阅读0次

本文收录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
  • p 正常应用此次提交
  • r 重写提交信息
  • e 修改本次提交(比如git commit -p可以用于拆分提交)
  • s 本次提交合并到上面(就是编辑页面的上下)一个提交中
  • fs, 不保留提交信息
  • x 暂不清楚
  • d 丢弃本次提交

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

六、其他

  • 交互式命令 -p
    add -p 选择那些需要提交(stage)
    commit -p自定义 commit (powerful!)
  • 清除uncheck文件 git clean -f
  • 清除远程已删除的分支 git remote prune origin
  • git bisect
  • git push -u 与远程分支添加连接
  • git diff [branch_name]...
    如果用2个点进行diff,会把[branch_name]的新增代码显示出来
    用3个点进行diff,只会显示当前分支与[branch_name]的最近公共祖先与当前分支的差异。

实例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
  • e 编辑提交内容与提交信息
  • s 进行拆分(s选项用不了是因为你只有一段连续的修改无法拆分)
  • y 应用拆分
  • q 完成拆分

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


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 工具用来解决冲突真的是我见过对用户最为友好的方式了。

未完待续~

相关文章

  • Git 管理 (二)

    原文地址梦想小筑 Git的奇技淫巧:see_no_evil: Git常用命令集合,Fork于tips项目 Git是...

  • Git使用技巧

    Git的奇技淫巧:see_no_evil: Git常用命令集合,Fork于tips项目 Git是一个“分布式版本管...

  • git 奇技淫巧

    Tag 添加 Tag 例如:1.0.0 推送所有 tag,同步到远程仓库: 删除本地 Tag 例如:1.0.0 删...

  • git - 奇技淫巧

    本文收录git的一些用法,常用or不常用PS: 都是命令行操作,对应IDE操作不做记录 一、远程覆盖本地 这其实是...

  • Git的奇技淫巧

    Git常用命令集合,Fork于tips项目 Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写...

  • Git 的奇技淫巧

    Git 是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是...

  • Jenkins奇技淫巧 — 配置篇

    Jenkins奇技淫巧 — 安装篇(mac)Jenkins奇技淫巧 — 配置篇Jenkins奇技淫巧 — 安全篇J...

  • Jenkins奇技淫巧 — 安全篇

    Jenkins奇技淫巧 — 安装篇(mac)Jenkins奇技淫巧 — 配置篇Jenkins奇技淫巧 — 安全篇J...

  • Jenkins奇技淫巧 — 安装篇(mac)

    Jenkins奇技淫巧 — 安装篇(mac)Jenkins奇技淫巧 — 配置篇Jenkins奇技淫巧 — 安全篇J...

  • Jenkins奇技淫巧 — 插件篇

    Jenkins奇技淫巧 — 安装篇(mac)Jenkins奇技淫巧 — 配置篇Jenkins奇技淫巧 — 安全篇J...

网友评论

      本文标题:git - 奇技淫巧

      本文链接:https://www.haomeiwen.com/subject/dggeyhtx.html