在Git中仅拉取未更改的文件

时间:2014-05-22 11:58:18

标签: git

如何从远程存储库中仅提取未更改的文件并保留我的本地更改,而不进行任何合并?

有人提出了这个序列:

git stash
git pull
git stash pop

然而,有一个明显的缺点:最后一个命令可能存在冲突,我需要做一些事情来解决它们(就好像我有大量冲突的文件,这会让人感到麻烦)。

在TFS中,我只是“获取最新版本”,没有大惊小怪。这里有类似的东西吗?

2 个答案:

答案 0 :(得分:5)

TFS 获取最新版本还会强制您进行合并,如果它们与您更改的文件冲突,那么它与git pull完全没有区别。

在提交时进行大量合并通常比一次大合并更容易,这就是为什么git的工作流程就是这样的原因。

有可能(如果不是一个好主意)在git中做你要求的事情;基本上你试图推迟你已经改变的文件的所有合并,直到你准备好提交原点。要让git正确地跟踪它,你需要有一个与你所分支的分支分开的本地分支。

git checkout -b mywork # Create local branch
# ... hack away ...

# When you want to get changes from origin.  Note
# that you can script this part to do it as one step.
git commit          # Commit my changes to local branch
git checkout master # Go back to branch tracking origin
git pull            # Retrieve changes from origin
git checkout mywork

# Here's the tricky part; merge from master, taking your
# code wherever there's a conflict, and *not* recording as
# a merge; if recorded as a merge, you'll overwrite changes
# in master when you merge back
git merge --squash --strategy-option=ours master

# ... hack away ...

当你准备推动时,你将我的工作合并到主人并从那里推。

再次注意,当你将mywork合并为master时,当你为一个大合并提取更改时,你正在交易许多较小的合并,而这通常不是最好的。

答案 1 :(得分:1)

您始终只需fetch更改,而不是pull

当您fetch git将更改从服务器提取到远程分支时,例如当您fetch master时,它会更新origin/master。因此,您可以查看新的更改,而不会影响您的本地master分支。

注意当您使用pull git实际执行的操作是fetch更改,然后merge将它们放入您的分支。