如何将子目录中的单个文件推送到Github(而不是主分支)

50

我已经修改了存储库子目录中的一个单独文件,并希望将该文件推送到Github。

我对一个文件进行了小改动,不想重新上传整个存储库。

目前我看到的所有说明都要求我在本地与主分支合并,然后将本地主分支推送到远程源。

我如何只推送那一个文件?


2
只需将那个文件添加到暂存区并提交即可。唯一会被推送的更改就是你的文件。 - chwi
7个回答

45

当你执行推送操作时,Git只会获取你已经提交的更改。

还记得当你执行git status命令时,它会显示自上次推送以来你更改过的文件吗?

一旦你提交了这些更改并进行了推送,它们就是唯一被推送的文件,所以你不必担心整个主分支都被推送了,因为实际上并没有。

如何推送单个文件:

git commit yourfile.js
git status
git push origin master

23

非常简单。只需按照以下步骤操作:
1. git status
2. git add {文件名} //您已更改的文件名
3. git status
4. git commit -m '{您的消息}'
5. git push origin master


13

首先要说的是,git的工作方式并不是直接推送/拉取文件。

你在推送/拉取指向提交的引用。那么,在git中,提交是一棵对象树的引用(其中文件被表示为对象之一)。

因此,当您推送提交时,git会将一组引用推送到像这张图片中一样:

git commits

如果您尚未推送主分支,则将推送整个分支的历史记录。

因此,在您的示例中,当您提交和推送您的文件时,如果之前没有推送过,则整个主分支将被推送。

要做到您所要求的,您需要创建一个无历史记录的干净分支,就像这个答案中的操作。


1
只需要澄清一点 - 你实际上并不推送提交,你推送的是指向提交的引用(主要是分支和标签)。但是对于漂亮的图形和详细的描述给予加分。 - twalberg
@AdamAdamaszek 这张图是从哪里来的? - Wakan Tanka
1
据我所知,这来自于《Pro Git》一书。 - Adam Adamaszek
请突出显示“--orphan”分支解决方案的链接,因为如果您不希望其他文件出现在历史记录中,这是一种符合规范的答案。不幸的是,我最初在谷歌上提出问题的方式并没有引导我找到那个链接。 - simno

8

如果您提交一个文件并推送您的修订版本,它不会传输整个存储库,而是会推送更改。


我认为它正在推送整个存储库的原因是上传需要很长时间,而且我收到了这条消息:“计数对象:26,完成。编写对象:19%(5/26),12.41 MiB | 119 KiB / s”。我更改的文件只是一些小文本文件,大小远小于1兆字节。 - moon star
我无法告诉您您的更改内容,但假设您有一个包含100,000个文件的目录,并更改其中一个文件。然后更改内容为:您的文件内容、目录、包含100,000个文件列表的目录(不包括它们的内容)、包含目录的目录等,最后是提交元数据。当然,您可能会有多个提交。或者您可能遇到其他问题并推送完全不同的内容。 - Michael Krelin - hacker

6

仅推送单个文件

git commit -m "Message goes here" filename

仅推送两个文件。

git commit -m "Message goes here" file1 file2

2

它只会推送新的提交。它不会推送整个“master”分支。这是使用分布式版本控制系统的好处之一。Git会找出实际需要的内容,并仅推送这些部分。如果你所在的分支已被其他人更改并推送,你需要先拉取。然后再推送你的提交。


2

git status #然后找到需要推送的文件 git add example.FileExtension

git commit "message is example"

git push -u origin(或者你使用的其他名称)master(或者你想要推送到的某个分支的名称)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接