如何从远程提取文件而不覆盖本地文件?
我正试图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
),然后把分支推送到远程仓库。