记录一些git的原理学习,以及工作学习中遇到的一些git的操作问题。

操作

pull request

  1. 第一次提pr

    1. fork原仓库
    2. 本地clone,两个remote,fork和origin
    3. checkout -b new-branch
    4. 修改,add,commit,push
    5. 在github提pr
  2. 修改提过的pr

    1. 本地仓库与远程同步

      直接修改,然后push到fork的对应分支就行,会自动更新。

    2. 本地仓库与远程不同步

      以下操作都在new-branch分支上

      1. git fetch origin
      2. git rebase origin/master
      3. 如果有冲突则解决,然后git rebase --continue继续rebase
      4. push fork

rebase

修改 git 的历史 commit,你能想到几种方案? 详细介绍了rebase基本用法

object损坏

image-20231030100954710

如图,我也不知道为什么突然就寄了。。。

总之进行了这些操作,虽然不知道是哪个起作用了,但总算好了:

https://blog.csdn.net/xiaoqixiaoguai/article/details/128591332

首先删除空白对象

1
2
cd .git
find . -type f -empty -delete -print

然后更新ref到某个版本号

1
2
3
4
5
cd ..
tail -n 2 .git/logs/refs/heads/master
git show xxxx(版本号)
git update-ref HEAD xxxx(版本号)
git fsck

如果还不能用,继续:

1
2
3
rm .git/index
git reset
git fsck

我到这里之后显示:

image-20231030101123181

继续执行:

  1. 修复 refs/remotes/origin/master:

    1
    2
    bashCopy codegit update-ref -d refs/remotes/origin/master
    git fetch origin

    这将删除损坏的 origin/master 引用,然后从远程仓库重新获取。

  2. 修复 dangling blob:

    如果 git fsck 显示了 dangling blob,你可以尝试删除这些对象:

    1
    2
    bashCopy codegit reflog expire --expire=now --all
    git gc --prune=now

    这将清理无用的 dangling 对象。

成功。

原理

  1. merge与rebase的差异

    merge:

    merge

    rebase:

    rebase