git - 修改了多个文件,只推送了几个文件
问题描述
我有几个问题,如下所述。请建议。场景 1:在目录 1 中,我有 File1、File2、File3。我已经修改了所有三个文件。但我只想将 File1 和 File3 推送到 Git Repo。并保留 Files2 中的更改,但不推送到 Git Repo。我怎样才能做到这一点 ?问候 RG
解决方案
Git 不推送文件。Git 推送提交。提交确实包含文件,但您要么得到整个提交,要么没有。
每个提交都代表所有文件的完整快照。但是 Git 不会根据您的工作树中的内容进行新的提交。您的工作树(或工作树)是您可以处理文件的区域,因此得名。这些文件在计算机上具有日常形式。
但是,在使用 Git 时,始终存在每个文件的三个活动副本1。第一个副本是您现在正在使用的提交中的副本。第一个副本无法更改,就像任何现有提交都无法更改一样。第三个副本是您的工作树中的副本,您可以处理/使用它:它可以更改。在这种情况下,有趣的是在当前提交和工作树之间的中间那个。可以使用 替换此中间副本git add
。
这个中间副本(再次参见脚注 1)位于 Git 所称的不同地方,即index、staging area或(这些天很少)cache。它开始匹配提交。当您git checkout
进行某些特定的提交时,Git:
- 将提交中的所有文件复制到索引中(再次参见脚注 1),并且
- 将索引中的所有文件复制到您的工作树中,以便您可以查看和使用它们。
当您在工作树中进行更改时,索引中的副本不会发生任何变化。最终,您必须git add
在更新的工作树文件上运行。此命令将工作树文件复制回索引中。
对索引的一个很好(但不完整)的简短描述是它包含您提议的 next commit。使用git add
将文件从工作树复制到索引中会更新您提议的下一次提交。
当您运行时git commit
,Git 会为您当时索引中的所有文件拍摄一个新快照。这包括在签出提交时复制到索引中的所有未更改的内容,以及您使用.git add
新的快照,由你当时和那里的索引中的内容组成——即,从你提议的提交中——现在成为你当前的提交。现在,您当前的提交和您的索引再次像往常一样匹配。
您更改但未更改的工作树中的任何文件在您的工作树中git add
保持不变。
您现在可以git push
提交新的提交。如果您将git push
ing 到的另一个 Git 接受它们,则该 Git 现在具有新的提交。这些新提交具有您制作的快照。没有任何人可以更改这些快照中的任何内容——无论是您、您的 Git 还是其他任何人。每个提交都由其哈希 ID 唯一标识。当您(或任何人)进行该提交时创建的该哈希 ID 将永远保留给该提交,而不是其他。但是现在另一个 Git有了这些提交,通过他们的哈希 ID,其他 Git 的任何用户都可以git checkout
通过其哈希 ID 或他们可能选择用于这些哈希 ID 的任何名称来提交其中一个:分支名称、标签名称等。
请注意,git status
工作方式是运行两个比较:
首先,它将当前(或
HEAD
)提交中所有文件的副本与索引中的副本进行比较。无论哪里都是一样的,git status
什么都不说。但是,无论哪里有不同,git status
说staged for commit
。然后,
git status
将索引中所有文件的所有副本与工作树中的所有副本进行比较。无论哪里都是一样的,git status
什么都不说。但是,无论哪里有不同,git status
说not staged for commit
。
因此,即使您无法直接看到索引,也可以使用git status
. 每当git status
安静时,索引匹配。每当git status
嘈杂时,某些文件的索引副本或多个副本与已提交和/或工作树副本或多个副本不同。
1从技术上讲,索引包含对每个文件的内部 Git blob 对象的引用,而不是每个文件的文字副本。如果需要,在文件上运行将创建一个新的 blob,然后将适当的引用放入索引中,而不是实际将文件物理复制到索引中。但是,除非您开始尝试and ,否则您无法分辨出其中的区别。git add
git ls-files --stage
git update-index
推荐阅读
- java - 给定两个随机整数数组,打印它们的交集。也就是说,打印两个给定数组中存在的所有元素
- javascript - 如何在 jquery 中禁用事件?
- python - 自动化无聊的东西 - 第 5 章 - 国际象棋词典验证器
- json - 如何仅在循环结束时将数字加一?
- postgresql - postgresql、xpath 查询和 cdata 元素作为纯文本
- swiftui - SwiftUI 崩溃:“前提条件失败:属性未能设置初始值:71”
- amazon-web-services - 自动化 Redshift 权限
- git - Git“错误:无效路径'cse5441_lab1/main。” (视窗)
- swift - 如何将 UIPickerView 选定的行发送到另一个 ViewController
- c++ - 为什么我的 HWID 锁接受 AcceptedSerial_2 中的任何值