如何向整个 Git 仓库补提交一个文件
2017-09-14 23:56
295 查看
微软在 Reference Source 里开放了 .Net Framework 多个版本的源码。为了更方便地阅读这些源码,我们把每一个版本都下载下来后按顺序提交到 git 仓库中。
但是!!!居然忘了在第一次提交之前放一个 .gitignore 文件!如果没有这个文件,那我们每次打开源码查看都会带来一大堆不明所以的修改文件。那么多的源码,绝对不会想重新挨个版本再提交一次。于是找到了一条可以解决这个问题的 git 命令。
执行之后,
如果希望此操作对所有分支生效,则加一个
写这个命令时需要注意:
- git 在 Bash 里写的时候,
-
执行了此命令后,所有的提交其实都被重写了,提交号已经改变。如果你从未推送到远端过,那么恭喜,你已经在神不知鬼不觉中添加了一个 .gitignore 文件,就像是第一次提交就加了这个文件一样。
但是,如果此前有推送到过远程分支,请慎重!因为你的此次推送的命令和其他人首次拉取的命令将有所改变:
推送(所有分支,强制):
拉取(获取 + 重置)
但是!!!居然忘了在第一次提交之前放一个 .gitignore 文件!如果没有这个文件,那我们每次打开源码查看都会带来一大堆不明所以的修改文件。那么多的源码,绝对不会想重新挨个版本再提交一次。于是找到了一条可以解决这个问题的 git 命令。
git filter-branch --index-filter "cp /C/仓库外面某个路径下的/.gitignore . && git add .gitignore"
执行之后,
C:\仓库外面某个路径下的\.gitignore文件就被添加到了当前分支的第一次提交里面,并且查看后面任何一次提交对应的全部文件时,都会有这个文件。
如果希望此操作对所有分支生效,则加一个
--all参数,即:
git filter-branch --index-filter "cp /C/仓库外面某个路径下的/.gitignore . && git add .gitignore" -- --all
写这个命令时需要注意:
- git 在 Bash 里写的时候,
C:\需要写成
/C/。
-
-- --all中的
--是用来区分路径和提交的,官方说法是:
fatal: ambiguous argument 'cp /C/仓库外面某个路径下的/.gitignore . && git add .g itignore': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
执行了此命令后,所有的提交其实都被重写了,提交号已经改变。如果你从未推送到远端过,那么恭喜,你已经在神不知鬼不觉中添加了一个 .gitignore 文件,就像是第一次提交就加了这个文件一样。
但是,如果此前有推送到过远程分支,请慎重!因为你的此次推送的命令和其他人首次拉取的命令将有所改变:
推送(所有分支,强制):
$ git push --all -f
拉取(获取 + 重置)
$ git fetch $ git reset origin/master --hard
参考资料
GIT: How do I add a file to the first commit (and rewrite history in the process)?相关文章推荐
- git 将一个本地文件目录提交到远程仓库的步骤
- 如何永久删除git仓库中敏感文件的提交记录
- 如何永久删除git仓库中敏感文件的提交记录
- git 下如何把另外一个分支的某个文件改动merge 合并到这个分支,而不是把整个分支merge过来
- GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?
- GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?
- git如何查看某一个文件的详细提交记录
- git如何查看某一个文件的详细提交记录
- GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录
- 如何将现有 git 仓库中的子项目单独抽出来作为一个独立仓库并保留其提交历史
- 如何使用git在github上开发的时候和别人在别人仓库上进行协作编程,最后再统一提交
- git换行符导致的提交整个文件的解决方案
- git 如何提交go get -u 下来的第三方github.com的仓库
- git如何删除远程仓库的某次错误提交
- 如何将设备文件提交进git
- Git简明教程--4.文件添加和版本提交到本地仓库
- git正确的删除远程仓库的文件并用.gitignore忽略提交此文件
- 如何创建一个 Git 仓库
- Android Studio中如何将GIT提交项目到远程仓库
- 使用git提交一个自己的vim配置文件