只拉Git中未更改的文件


Pull only unchanged files in Git

本问题已经有最佳答案,请猛点这里访问。

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

有人建议这样做:

1
2
3
git stash
git pull
git stash pop

但是,有一个明显的缺点:在最后一个命令上可能会有冲突,我需要做一些事情来解决它们(比如如果我有大量的冲突文件,这会很麻烦)。

在TFS中,我只是简单地做了"获取最新版本",不必大惊小怪。这里有类似的东西吗?


如果它们与更改的文件冲突,tfs get latest版本还将强制您进行合并,因此这与git pull没有什么不同。

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

可以(如果不是一个好主意)在Git中执行您的请求;基本上,您正在尝试推迟对已更改文件的所有合并,直到您准备好提交到源站为止。为了让Git能够正确地跟踪这一点,您需要将本地分支与拉入的分支分开。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 ...

当你准备推的时候,你把我的工作合并到主控中,然后从那里推。

同样,请注意,当您将我的工作合并到master中时,为一个大合并拉变更时,您正在交易许多较小的合并,这通常不是最好的。


您可以只对更改执行fetch操作,而不执行pull操作。

当您fetchgit将更改从服务器拉到远程分支时,例如当您fetchmaster时,它将更新origin/master。因此,您可以在不影响本地master分支的情况下查看新的更改。

注意当你使用pull时,git实际做的是对fetch进行更改,然后将这些更改放入你的分支中。