在git中,如何从上游源(即原始项目)中提取某些文件?
我有一个我正在研究的项目,它最初是从一个非常活跃的存储库中分叉出来的.我已将原始文件添加为名为"upstream"的远程程序,以便可以运行:
git pull upstream
Run Code Online (Sandbox Code Playgroud)
并将项目更新为最新的提交.
问题:有一些文件(例如我的Gruntfile.js)我不希望与原始项目一起更新.每当我提取这些提交时,我都会遇到合并冲突,因为我已经更改了我自己版本中的文件.
我确实想要为我自己的本地提交跟踪这些文件并从我自己的来源中提取更改,因此.gitignore永久添加这些文件不是一种选择.
我目前的解决方案是暂时添加一个grunt任务Gruntfile.js和其他人.gitignore,从上游拉出,然后从中删除它们,.gitignore以便我可以跟踪自己的更改并推送到我的原点.然而,这感觉很糟糕.
有没有什么方法可以忽略这些文件只有从"上游"拉?
是的,你可以这样做.
git pull是git fetch的简写,后跟git merge FETCH_HEAD
所以首先你可以做一个,
git fetch upstream
Run Code Online (Sandbox Code Playgroud)
其次是,
git merge --no-log --no-ff --no-commit upstream/branch
Run Code Online (Sandbox Code Playgroud)
提交前Git会停止.因此,您应该能够修改合并,并排除所需的文件.
UPDATE
可以使用git别名组合命令.
在〜/ .gitconfig中创建一个别名
[alias]
fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch
Run Code Online (Sandbox Code Playgroud)
你可以进一步添加,
[alias]
fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch && git reset file/path/not/to/be/updated && git checkout file/path/not/to/be/updated
Run Code Online (Sandbox Code Playgroud)
使用git fnm的完整操作.