git - git add 和 git commit 混淆
问题描述
git add
我基本上知道“我想将此文件添加到我的下一个快照”和git commit
“拍摄快照”之间的区别。
但是,当我运行git add file1
然后file1
从我的工作目录中删除然后运行git commit
它仍然可以工作。不知何故,快照是在添加时拍摄的,而不是在提交时拍摄的。我对吗?
解决方案
git commit 通过
请参阅“ Git 中 HEAD、工作树和索引有什么区别? ”
在您的情况下,删除文件后(但将其添加到索引后), agit status
会给您:
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: go.mod
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: go.mod
该文件是:
- 准备好成为下一次提交的一部分
- 本地删除
Agit restore -- <myFile>
足以在本地恢复它。
工作树(或工作目录)是实际签出文件的树。
工作树通常包含 HEAD 提交树的内容,以及您已进行但尚未提交的任何本地更改。
这个想法是准备你的下一次提交,而不是盲目地将你当前的所有修改放入一个巨大的提交中。
最好进行小的连贯提交而不是巨大的提交,以获得合乎逻辑的历史记录,并使未来git bisect
更容易。
您甚至可以暂存(添加到索引)文件的一部分(交互式暂存)
OP补充说:
想象一下,提交完成了实际提交和添加的工作。
让我们称之为虚构的提交。
您仍然可以使用虚构的提交一点一点地完成这项工作
首先:该命令(添加所有并提交)确实存在:
git commit -am "Let's add everything"
其次,要“一点一点”,你必须使用 git add,然后提交。
提交会获取索引中的所有内容。
推荐阅读
- javascript - 将数组值放入多个变量 Javascript
- angular - 获取 QuotaExceededError
- excel - 如果工作簿正在使用并被锁定以进行编辑,我如何跳过它?
- html - 如何创建重复的嵌套 div 彩虹是 CSS
- android - Mutablelivedata 可变实例大小问题
- vue.js - 组件属性在一个 Vuex 状态更改时重新评估
- c# - 无法隐式转换类型“列表”
到 'IEnumerable ' - javascript - 使用 Jquery 多次按下按钮时修复表格中的行
- javascript - CKEDITOR 在本地工作,但不在 Internet Explorer 11 的服务器中
- mysql - 给定表的正确连接