这几天用 rebase 的 2 个事例
rebase 前的提交历史大概这样:
提交时间 | commit message |
---|---|
10:01 | A1 |
10:02 | B |
10:03 | A2 |
10:04 | C |
我想把 A1 和 A2 合并, 用 webstorm 进行 rebase:
action | commit message |
---|---|
pick | A1 |
squash | A2 |
pick | B |
pick | C |
然后点 start rebase, rebase 完只剩下 A1, B, C 3 个 commit, 这时 npm 开始报错提示有个文件不存在, 看了 A1 commit 的内容发现这个文件在 A1 commit 里被删了, 但是原本的 A1, A2 commit 里并没有删这个文件 接着就是 git reflog 找回 rebase 前的 commit id, git reset 恢复到 git rebase 前, 再试一次 rebase 还是一样 试了几次后发现下面这样进行 rebase 就能达到我的目的, 只剩下 A1, B, C 3 个 commit, 文件也没丢
action | commit message |
---|---|
pick | A2 |
squash | A1 |
pick | B |
pick | C |
使用 webstorm 右下角 git 分支里的 "Rebase Current onto Selected" 将服务器端的分支内容用 rebase 的方式合并到当前分支 结果合并一半右下角弹出红色感叹号, 报错信息大概这样"文件路径 Permission XXXX", 接着还是 git reflog 找回 rebase 前的 commit id 恢复后再试一次就没报错了 rebase 合并是合并完了, 但我暂存区那些修改完还没提交的文件都不见了! 查了搜索引擎后用 git stash pop 恢复出来
事例 1 可能是我操作失误或文件冲突导致, 也就还好是一个完整的文件被合并丢了, rebase 完立马就发现了, 如果是某几行代码合并丢了, 那以我这的测试程度可能要到生产环境出 bug 报错才会发现。也还好我是提交完 C commit 后就进行 rebase 事例 2 我就担心要是 git stash 里没有我的文件, 或者被我瞎操作把 git stash 清空了那就完了
所以我现在用 git 命令时会很谨慎, 生怕有些代码给我弄丢了. 特别是合并冲突处理文件冲突的时候, 面对这几个月前编辑的代码, 我也不知道哪边的版本是正确的代码
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.