DevOps系列文章之 Git知识大全

文章详细介绍了gitmerge和gitrebase在合并分支时的不同,以及它们与gitreset在撤销提交时的区别。gitmerge创建合并提交,保留完整历史,而gitrebase重新构造提交历史,使历史更简洁。gitreset则可以回退到指定提交状态,包括硬重置和混合重置。此外,文章还提到了gitrevert用于撤销提交的方式以及查看和管理提交历史的命令。

思考:

git merge 与 git rebase 的区别是?

  • rebase会合并该分支与其他分支的commit history,可能会得到一个新的commit history
  • rebase得到更简洁的项目历史,去掉了merge commi,如果合并出现代码问题不容易定位,因为re-write了commit history
  • merge会创建新的commit,包括每个分支的commit 详情
  • 每次merge会自动产生一个merge commit,特别是commit比较频繁时,看到分支很杂乱。
  • 想要得到一个干净的,没有merge commit的线性commit历史记录,选择git rebase
  • 想要得到一个完整的commit历史记录,且想避重写commit历史记录的风险,选择git merge

git reset 与 git rebase的区别?

  • git revert会生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留,也就是说对于项目的版本历史来说是往前走的。
  • git reset 则是回到某次提交,类似于穿越时空。

实践操作

  • 获取Git仓库

    • 现有文件目录使用git init初始化仓库
    • 从远程服务器上克隆git clone一个仓库
  • 合并其它分支的代码

    • git merge
    • git rebase
  • 撤销合并merge/rebase

    • git reset --hard [commit] 工作区、暂存区撤回到制定的commit版本
    • git reset --merge [commit] 或者 git reset --merge HEAD^ 撤回到合并前的commit
  • 修改某次的commit

    • git commit -amend -m 'comment' 替换上一次的commit
    • git rebase -i HEAD~[数字n] 进入vim编辑器,并显示最近n条最新的commit记录
  • 撤销某次的commit

    • git revert HEAD 产生新一次commit来抵消上一次提交

    • git revert commit_id 撤销中间某次commit

    • git revert -m commit_id 撤销其他分支合过来的commit

    • git revert --no-commit commit1..commit5 撤销commit1(不包括)至commit5之间的连续commit

      git revert的参数:

      --no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。

      --no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。

  • 丢弃某次commit

    • git reset [last good SHA] 丢弃掉某个提交之后的所有提交,在提交历史中彻底消失
    • git reset --hard [last good SHA] --hard参数可以让工作区里面的文件也回到以前的状态
  • 查看提交历史记录

    • git log 时光机,查看refs的HEAD的指向变动
  • 查看文件的改动

    • git diff 对比工作区与暂存区的同文件, 未添加至暂存区的文件改动
    • git diff --staged/cached查看添加至暂存区所有文件的内容修改
    • git stage 显示工作目录和暂存区的状态
  • 暂存文件的改动

    • git stash 临时保存和恢复工作区文件的改动
  • 撤销文件的改动

    • git checkout -- [filename]
  • 撤销暂存区的文件

    • git rm --cache [filename]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值