用 git 踩了个坑

clrss 1月前 14

事件顺序

  1. 添加文件 A -- commit1
  2. 一般操作 -- commit2~9
  3. git rm --cached A 并把 A 添加到 gitignore -- commit10
  4. git rebase -i commit2. 保持 commit10 不变
  5. 回放 commit10 时, 文件 A 就丢了...
最新回复 (8)
  • yiXu 26天前
    引用 2
    @clrss 没怎么看懂,能给出可复现的,所有操作的命令行代码吗? gist 给个最好,我想试试看。
  • momocraft 26天前
    引用 3
    commit10 删掉了 A, apply 时也删掉 A 不是正常的吗?

    你的期待是 apply 后 A 留在 worktree? 可是 commit 一级不保留这个信息
  • xuanbg 26天前
    引用 4
    签出 commit9 不就回来了?
  • hw93 26天前
    引用 5
    只要 commit 了,文件就不会丢
  • 楼主 clrss 26天前
    引用 6
    @xuanbg
    @hw93

    复现步骤总结错了.

    实际上是
    git rm A
    mv /some/other/file A
  • dezng 26天前
    引用 7
    看你上面的操作,rebase 基于 commit2,commit1 还存在,A 文件肯定还在。即使 commit1 没了,一般通过 git reflog 也能找回。
  • 楼主 clrss 26天前
    引用 8
    @dezng 看附言, 实际上是 git rm A, 然后换了个同名文件. 我要的是后来换的同名文件.
  • dezng 26天前
    引用 9
    @clrss commit1 还在,A 一定还在 git checkout commit1 -- path/to/A 你就看到原来的 A 文件了
  • 游客
    10
返回