我可以从特定的分支中提取一些文件,修改它们并将它们推送到同一github存储库中的另一个分支吗?
我尝试了一些随机文本文件,我在github上创建了这些文件,在我的计算机上拉取它们,修改它们,然后我在github上创建了一个单独的分支,称为“另一个”。当我尝试使用git将修改后的文件从我的计算机推送到github时,我收到了以下消息:我可以从特定的分支中提取一些文件,修改它们并将它们推送到同一github存储库中的另一个分支吗?,git,github,Git,Github,我尝试了一些随机文本文件,我在github上创建了这些文件,在我的计算机上拉取它们,修改它们,然后我在github上创建了一个单独的分支,称为“另一个”。当我尝试使用git将修改后的文件从我的计算机推送到github时,我收到了以下消息: error: src refspec another does not match any<br> error: failed to push some refs to 'https://github.com/username/repo-name.
error: src refspec another does not match any<br>
error: failed to push some refs to 'https://github.com/username/repo-name.git'
错误:src refspec other不匹配任何
错误:无法将某些引用推送到'https://github.com/username/repo-name.git'
我以前键入的内容:
git将原点推到另一个
首先移动到分支另一个
git checkout another
然后从另一个分支复制文件(本例中为master)
然后按下另一个分支
git add *
git commit -m "message"
git push origin another
Git实际上不是关于文件的,Git pull
不拉文件。然而,你可能会实现你可能想要的。这里真正的问题在于在Git的上下文中找出您想要的内容,Git存储的是提交,而不是文件
不过,首先,让我们谈谈这条信息:
这意味着您没有名为另一个
的分支。考虑到你刚才所说的,这是有道理的:
我[创建]了一些随机文本文件。。。在github上
现在还不完全清楚您是如何做到这一点的(请参阅),但让我们假设这在GitHub上创建了一个或多个新提交,每个提交都在某个分支上-master
或main
。。。把它们放在我的电脑上
让我们假设您在这里运行:
git pull
在第一次使用创建的存储库中:
git克隆
其中指定的url
是一个包含Git的url,在您的计算机上,与GitHub的计算机进行对话,以从GitHub存储库获取提交,并将提交放到GitHub存储库中。这git pull
将从您的GitHub存储库获得提交。这些提交将包含您创建的文件。这些提交在它们所在的任何分支上(任何给定的提交都可以在这里的一个或多个分支上,甚至在某些情况下,尽管没有分支上的提交不是这个)。假设您在这里使用的是新的main
分支名称,因此这些新提交位于main
(而不是任何其他分支)
在“获取新提交”步骤(git fetch
)之后,git pull
运行您选择的第二个git命令。如果您不告诉它,那么第二个命令将是gitmerge
。在本例中可能适用的条件下,这个git merge
将执行git所称的快进合并,这在技术上根本不是合并。结果是,您的计算机上的main
分支或Git存储库中的任何名称现在与GitHub上的main
分支或存储库中的任何名称同步
(这里我们需要相当精确,否则这些东西都不起作用,正如您刚才看到的。)
[一] 修改了[这些文件在本地],然后我在github上创建了一个单独的分支,称为“另一个”
请注意,在快进操作之后,Git存储库将具有与GitHub存储库相同的提交。您自己的Git将再次在本地更新的分支名称上运行Git checkout
,我仍然假设它在这里命名为main
,尽管它可能是master
或其他名称
此git checkout
步骤创建或更新了您看到和修改的可见和可编辑文件。这些文件不在存储库中。要将它们放入存储库,必须在本地运行git add
和git commit
。这将创建一个新的提交。提交是存储库中的内容
你没有提到做过那件事,所以我想你没有。在你拥有之前,这些文件只是你电脑上的文件。它们根本不存储在Git中。他们只是为你工作。您需要执行git add
和git commit
步骤来进行新的提交
同时,让我们回到这一点:
然后我在github上创建了一个单独的分支,称为“另一个”
这在GitHub上,在那边的另一个存储库中创建了一个分支。它对您的存储库没有影响。因此,您没有名为另一个的分支
当我试着推的时候
我们必须猜测你使用了什么命令,因为你没有告诉我们,但大概是:
git push origin another
这是合理的,但会立即给你刚才看到的错误,因为我们已经注意到你没有这样的分支
处理Git有点混乱和复杂
这是因为分布式源代码控制从根本上说是复杂的
Git的方法是在提交方面工作。每次提交都有一些有趣的属性:
- 每次提交都进行编号。这些数字并不是简单的连续数字,Git不会将其设置为commit#1,然后再设置为commit#2,依此类推,而是看起来随机但根本不是随机的散列ID。散列ID是每个提交内容的加密校验和,并保证对该特定提交是唯一的。(例如,为了帮助实现这一点,Git在每次提交时都会添加日期和时间戳。)
- 每个提交都有两个部分:
- 一部分是每个文件的完整快照。这些文件以压缩、只读和消除重复的格式存储,因此,如果您有许多文件,但只更改了一个,那么您所做的新提交将重新使用所有其他文件。这节省了很多空间。然而,这确实意味着任何人都不能更改任何提交的文件。(这也由编号方案强制执行。)
- 每个提交的另一部分是元数据,即关于提交本身的信息。例如,这包括您的姓名和电子邮件地址。它包括我提到的日期和时间戳。包括
git pull
git push origin another
... <-F <-G <-H
...--F--G--H <-- main
...--F--G--H <-- main
...--F--G--H--I <-- main
...--G--H <-- main
...--G--H <-- develop, main
...--G--H <-- develop, main (HEAD)
...--G--H <-- develop (HEAD), main
...--G--H <-- main
\
I <-- develop (HEAD)
...--G--H <-- main
\
I--J <-- develop (HEAD)
I--J <-- develop
/
...--G--H <-- feature (HEAD), main
I--J <-- develop
/
...--G--H <-- main
\
K--L <-- feature (HEAD)
J <-- feature
/
...--G--H--I <-- main (HEAD)
...--G--H--K <-- main (HEAD)
J <-- feature
/
...--G--H--I <-- main (HEAD)
\
K
...--G--H--I--J <-- feature
\
K <-- main (HEAD)
J <-- feature
/
...--G--H--I <-- main (HEAD)
\
K <-- origin/main
...--G--H <-- main (HEAD), origin/main
...--G--H <-- main (HEAD)
\
I <-- origin/main
...--G--H--I <-- main (HEAD), origin/main
J <-- main (HEAD)
/
...--G--H--I <-- origin/main
git push origin main
...--G--H--I--J <-- main (HEAD), origin/main
...--G--H <-- main (HEAD), origin/main
...--G--H <-- main, origin/main
\
I--J <-- another (HEAD)
git push origin another
...--G--H <-- main, origin/main
\
I--J <-- another (HEAD), origin/another
git branch --set-upstream-to=origin/another another
git fetch
git merge
git pull
git push
git fetch origin
...--G--H <-- main (HEAD), origin/main
...--G--H <-- main (HEAD)
\
I--J <-- origin/main
...--G--H--I--J <-- main (HEAD), origin/main
...--G--H--I--J <-- main (HEAD), origin/another, origin/main
...--G--H--I--J <-- another (HEAD), main, origin/another, origin/main
git push