git pull添加了旧文件的全新子目录?

时间:2018-02-12 05:41:00

标签: git github version-control

我猜,我是个白痴。

我一直认为git在我个人的使用中应该很简单。我通常只想要一个分支机构,我真正想做的就是将文件上传到网络,并能够在我的笔记本电脑和台式机之间来回下载。

今天我在我的一个项目上工作了很长时间(大约几个小时),我想推动我的改变。我的git最近表现得很糟糕,我通常最终不得不强迫git推,因为git似乎认为我的本地文件与在线repo不匹配;即使我没有推动任何其他机器的更改(我认为?)

这通常是我用来推送回购的命令,如果git给了我任何疑虑:

git add -A && git commit -m "message"
git push

我很熟悉只提交我已更改的文件,并按名称添加文件,但对于我个人的东西,有时我只想快速得到结果。如果不是我的回购,我将遵循回购管理员所期望的指示。

所以,这一次,我不能git push,它建议我先做一个git pull。好吧,好吧,无论如何伤害是什么?好吧,我认为git pull已经用repo中的那些重写了我所有的本地文件,我完全吓坏了半个小时 - 直到我后来发现它没有覆盖任何东西,它改为创建了子目录的副本( root repo目录中的所有文件(基本上是我更改之前的所有旧文件)。

为什么这样做?现在考虑一下,我想git这样做是明智的,因为只备份所有旧文件感觉很安全。但我以前从未见过它,这让我措手不及。

所以在那之后,我备份了我的所有文件,然后我删除了git添加的子目录,然后又做了另一个git push。在那之后,我回头看了看我的回购,它说我删除了一堆文件。我不知道为什么。但似乎我想要的所有文件实际上都在那里。所以看起来最终一切都已成功。

在某些时候,我真的需要彻底阅读git并熟悉它。

感谢。

1 个答案:

答案 0 :(得分:1)

如果在执行git pull时创建了一个子文件夹,那主要是因为远程仓库中的文件夹结构与本地仓库中的结构不同。

当您执行git pull时,git将从远程获取提交(本地仓库中不存在)并将这些更改合并到您的本地仓库。如果存在冲突文件,则应手动解决冲突并继续合并。

当你在删除后再次推送并添加一些文件("我备份了所有文件,然后我删除了git添加的子目录,然后又做了另一个git push。之后,我回头看了看repo并且它说我删除了一堆文件"),你之所以没有推动成功的原因如下:

  • 您应该确保工作树不在合并过程中(如果在git pull之后发生冲突)。要检查您是否处于合并过程中,可以使用命令git status。如果输出显示未合并路径的项目,则应按git add .git commit完成合并。
  • 如果您不在合并过程中,则应git status检查工作树是否清洁。如果工作树是干净的,则将更改推送到远程仓库。

此外,当您使用git repo时,以下命令可能会有所帮助:

  • git status :帮助您检查工作树是否干净,并为跟踪分支提供关系(前/后)。
  • git add . :将所有文件(未记录,未提交的更改,混淆等)添加到阶段状态。
  • git push -f :强制推送到远程。