我正在开发从远程存储库中提取的站点的本地版本,并对站点进行了更改。处理它的合作伙伴也进行了更改,我需要将它们拉到我的本地版本而不覆盖我创建或更改的文件。
我知道我可以存储我的更改,然后再访问它们,但这是最好的方法吗?
如果您都对同一个文件进行了更改,源代码管理软件应尽可能合并两者,接受这两个更改。
如果无法执行合并,则文件应突出显示为冲突,需要手动干预才能解决差异。
如果您在本地副本上说“您正在工作”,我建议定期和不定期地在本地存储库中提交更改。
然后你可以做一个git fetch origin
(假设原点是你的遥控器)和一个git rebase origin/master
(假设你想从主人那里得到最新的变化)。
然后,假设您在远程更改之上有 20 次 git 提交,但是当您准备将它们移动到任何地方时,git rebase -i
您始终可以执行在本地开发分支之外。
那里有纯粹主义者说不应该弄乱历史,但我认为在专业的本地开发分支上这样做是完全可以接受的。这样,您仍然拥有您正在开发的功能的本地历史,以及它启用的所有好东西,您还没有准备好向世界展示的历史。
另一种方法是做git stash; git pull origin/master; git stash pop
或类似的事情。
另外,请注意,在这两种情况下,您都必须解决任何现有的冲突。如果在发生冲突时您想要在从远程提取更改之前保留您的副本,您可以通过保留文件的本地版本来解决冲突。但我怀疑这是任何人都需要的,它可能会破坏事情。
git pull 基本上是两个操作的快捷方式:
git fetch
它从远程下载历史记录。git merge
它合并了当前分支中的新历史。这是第二步,将存储库中的更改合并到您的本地文件中,因为您要求 git。
问题是,为什么您需要进行这些更改。你想检查他们吗?
如果你只想要历史而不合并它,你可以使用 plain git fetch <remote>
。
如果你拉到你现有的分支,他的提交将与你的合并,或者你会被提示冲突或两者兼而有之。
但是他可以将他的分支签出到一个新的分支。
git checkout -b newbranch
并将其推送到origin newbranch
git push origin newbranch
那么你也能git fetch
并从您身边安全地结帐到该分支,而不会丢失您的工作。
git checkout newbranch
稍后,如果需要,您可以将他的分支与您的分支合并。