如何从远程提取文件而不覆盖本地文件?

我正试图build立一个新的git回购到一个预先存在的远程回购。

我想我的本地文件覆盖远程repo,但git说,我首先必须拉这些远程文件并合并它们。

有没有办法拉,但确保本地文件不被远程覆盖?

那么,是的,没有…

我知道你希望你的本地副本“覆盖”远程内容,但是,如果有人用某种不同的方式修改了远程回购中的文件,而你忽略了他们的改变,并试图“强制”你自己的改变,甚至没有看到可能的冲突,好吧,我为你(和你的同事)哭泣;-)

这就是说,做“正确的事情” 真的很容易

步骤1:

git stash 

在您当地的回购。 这将保存您的本地更新到隐藏,然后恢复您的修改后的文件回到他们的预编辑状态。

第2步:

 git pull 

得到任何修改的版本。 现在,希望这不会得到你担心的任何新版本的文件。 如果没有,那么下一步将顺利进行。 如果是这样 ,那么你有一些工作要做,你会很高兴你做到了。

第3步:

 git stash pop 

这将合并您在步骤1中隐藏的修改后的版本,以及在步骤2中所拉取的版本。如果一切顺利,那么您将全部设置!

另一方面,如果你在步骤2中所做的修改与修改(由于其他人在此期间正在编辑)之间存在真正的冲突,你将会发现并被告知要解决它们。 这样做。

事情会以这种方式变得更好 – 它可能会保持你的变化,而没有任何真正的工作,同时提醒你认真严肃的问题。

您可以先储藏您的本地变更,然后拉出,然后popup藏匿处。

 git stash git pull origin master git stash pop 

任何重写远程更改都会产生冲突,您必须手动解决。

因此,您已经将本地更改提交到本地存储库。 然后,为了在不更改本地文件的情况下对本地存储库进行远程更改,可以使用git fetch 。 实际上, git pull是一个两步操作:一个非破坏性的git fetch然后是git merge 。 看看'git pull'和'git fetch'有什么区别? 进行更多的讨论。

详细例子:

假设你的仓库是这样的(你已经改变了test2

 * ed0bcb2 - (HEAD, master) test2 * 4942854 - (origin/master, origin/HEAD) first 

origin资料库就像这样(其他人已经提交了test1 ):

 * 5437ca5 - (HEAD, master) test1 * 4942854 - first 

在这个时候,git会发出抱怨,并要求你先把test2推送到远程仓库。 如果你想看看test1是不是修改你的本地仓库,运行这个:

 $ git fetch 

你的结果本地仓库将是这样的:

 * ed0bcb2 - (HEAD, master) test2 | * 5437ca5 - (origin/master, origin/HEAD) test1 |/ * 4942854 - first 

现在,您在另一个分支中进行了远程更改,并保持本地文件不变。

那接下来呢? 通常情况下,您想要将更改与远程更改合并,然后进行提交和推送。 但是如果你不想单独使用你的修改(如果这就是你覆盖远程仓库的意思),你将不得不为你的test2创build一个新的分支( master ),然后把分支推送到远程仓库。