下图是Git流程图,我很奇怪为什么Git需要设计Index /Stage。
您知道Repository和Workspace之间的通信是本地的,因此Repository和Workspace之间的提交或回滚很容易。
为什么Git需要设计Index/Stage?
图像
我git gc在存储库中运行并收到致命错误:
Enumerating objects: 2382, done.
Counting objects: 100% (2382/2382), done.
Delta compression using up to 8 threads
Compressing objects: 100% (747/747), done.
fatal: unable to read <object-id>
fatal: failed to run repack
Run Code Online (Sandbox Code Playgroud)
运行git fsck --full --no-dangling提供了有关该对象问题的更多详细信息:
Checking object directories: 100% (256/256), done.
Checking objects: 100% (2381/2381), done.
error: <object-id>: invalid sha1 pointer in resolve-undo
Verifying commits in commit graph: 100% (287/287), done.
Run Code Online (Sandbox Code Playgroud)
我相信这是由已修复的错误引起的:
索引中的解析-撤消信息不受 GC 保护,这一问题已在 Git 2.38(2022 年第 3 季度)中得到纠正。
如果我的存储库已经处于这种状态,我该如何修复它?
我暂时想删除某个提交的一些文件并运行:git update-index --assume-unchanged file_name在一堆文件上。
然后我关闭了终端,是否有办法取回我运行命令的文件名,git update-index以便我可以--not-assume-unchanged在它们上运行?
当我第一次开始使用Git时,我发现checkout命令很混乱.但是,当我适应Git的版本控制模型时,它开始变得有意义了.现在我不得不向同事们教Git,我想checkout简单解释一下.我以为我有一个简单的解释(来自文档):
签出一个或多个工作树的路径
这似乎统一了一些你可以用结帐做的事情,这对于Git的新手来说似乎是一组多样化的操作:
git checkout .
git checkout HEAD .
git checkout HEAD~2
git checkout feature/update-readme README.md
Run Code Online (Sandbox Code Playgroud)
...除了最后一个,因为这不只是更新工作目录,它会分段文件.
我如何理解为什么或何时结账会导致某些事情上演而不是仅仅复制到工作目录中?
我有一个 Git 预提交钩子,它会去除空格并将修改后的文件保留在工作副本中,这样它就不会踩踏像git add -p.
如果我提交多个已更改文件中的一个,并且更正了空格,则我会在工作副本中更改两个文件和一个暂存文件(该文件也在工作副本中,但暂存更改存在空格错误):
vi fileWithBadWS.txt # leave bad whitespace
vi fileWithGoodWS.txt # don't leave bad whitespace
vi unrelatedFile.txt
git add fileWithBadWS.txt fileWithGoodWS.txt
git commit -m "Commited files, one with bad whitespace" # pre-commit hook fails
Run Code Online (Sandbox Code Playgroud)
仓库现在看起来像这样:
On branch master
Changes to be committed:
modified: fileWithBadWS.txt # bad WS
modified: fileWithGoodWS.txt
Changes not staged for commit:
modified: fileWithBadWS.txt # fixed WS
modified: unrelatedFile.txt
Run Code Online (Sandbox Code Playgroud)
我可以用:
git diff去看fileWithBadWS.txt并且unrelatedFile.txtgit diff --cached查看暂存文件fileWithBadWS.txt和 …假设我正在 Git 存储库中运行脚本并希望直接访问索引文件。如何以也尊重例如工作树的方式获取索引文件的路径?