相关疑难解决方法(0)

如何让Git"忘记"一个被跟踪但现在位于.gitignore的文件?

有一个文件被跟踪git,但现在该文件在.gitignore列表中.

但是,该文件在git status编辑后会一直显示.你怎么强迫git完全忘掉它?

git gitignore git-rm

4888
推荐指数
25
解决办法
111万
查看次数

忽略已提交到Git存储库的文件

我有一个已经初始化的Git存储库,我添加了一个.gitignore文件.如何刷新文件索引以便忽略我想忽略的文件?

git version-control caching gitignore git-rm

2429
推荐指数
21
解决办法
68万
查看次数

如何修复错误的合并,并将您的好提交重放到固定合并?

我意外地将一个不需要的文件(filename.orig在解析合并时)提交到我的存储库几个提交之前,直到现在我才注意到它.我想从存储库历史记录中完全删除该文件.

是否可以重写更改历史记录,以便filename.orig从未首先添加到存储库中?

git git-filter-branch git-rewrite-history git-rm

399
推荐指数
6
解决办法
30万
查看次数

重写GIT历史的实际后果是什么?

我们的项目已经使用git一个星期左右了,而且我们都非常享受它(在紧密的协作组中,它变成了一个完全不同的git体验).为了使事情尽可能简单,我们不会进行任何变基或历史修改.但我们确实在第一周犯了一些错误.做了一些不应该做的提交,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0).在他们长期进入我们的历史之前,我们没有发现这些事情.

现在我看到很多关于重写历史的警告,但我不确定我是否理解所涉及的危险.我们使用共享的裸存储库,并将所有分支推送到那里进行备份.

我希望如果你重写历史记录(比如删除一个提交),后续提交的完整列表将"丢失"该提交(并且可能不会编译/工作).我也希望如果发生这种情况,我实际上可以选择在历史的顶部解决这个问题(并将这部分历史留作非编译).

  • 如果我重写历史(并且所有编译/工作在所有受影响的分支中),我的同事是否需要执行任何特殊命令)?(换句话说,如果我做得好,他们会"知道我已经做过了吗?"
  • 任何具有我不知道的本地更改的用户是否有资格在git pull上合并失败?
  • 我错过了这里必不可少的东西吗

任何关于这个主题的文章/教程的参考也会非常好.

git git-rebase

24
推荐指数
2
解决办法
6006
查看次数

最终追溯 .gitignore(如何让 Git 完全/追溯忘记现在 .gitignore 中的文件)

前言

这个问题试图消除关于追溯应用 .gitignore 的混淆,而不仅仅是现在/未来。1

基本原理

我一直在寻找一种方法来追溯强制执行我当前的 .gitignore ,就像我在第一次提交中创建了 .gitignore 一样

我正在寻求的解决方案:

  • 不会需要手动指定文件
  • 要求提交
  • 将追溯适用于所有分支的所有提交
  • 忽略工作目录中指定的 .gitignore 文件,而不是删除它们(就像最初提交的根提交的 .gitignore 文件一样)
  • 将使用 git,而不是 BFG
  • 将适用于 .gitignore 异常,例如:
 *.ext
 !*special.ext
Run Code Online (Sandbox Code Playgroud)

不是解决方案

git rm --cached *.ext
git commit
Run Code Online (Sandbox Code Playgroud)

这需要 1. 手动指定文件和 2. 附加提交,这将导致在其他开发人员拉取时删除新忽略的文件。(它实际上只是一个git rm- 这是从 git 跟踪中删除- 但它会将文件单独留在本地(您的)工作目录中。 之后其他git pull将收到文件删除提交)

git filter-branch --index-filter 'git rm --cached *.ext' …
Run Code Online (Sandbox Code Playgroud)

git gitignore

8
推荐指数
2
解决办法
3439
查看次数

.gitignore和git rm --cached不会阻止文件被跟踪

我有一个android项目,它有一个测试模块,可以在git目录的子目录中删除并重新创建.apk文件.

我已将这些添加到.gitignore(目录,显式文件和*.apk),然后我就完成了

git rm -r --cached src/main/Tests/bin
Run Code Online (Sandbox Code Playgroud)

和git告诉我:

rm 'src/main/Tests/bin/Tests-debug-unaligned.apk'
rm 'src/main/Tests/bin/Tests-debug.apk'
rm 'src/main/Tests/bin/Tests.ap_'
rm 'src/main/Tests/bin/classes.dex'
Run Code Online (Sandbox Code Playgroud)

我然后

git commit . -m "removed apk files"
Run Code Online (Sandbox Code Playgroud)

我再次运行测试,删除文件并重新创建它们.我运行git status并显示为已修改.看来.gitignore没有用.这是我的.gitignore文件

*ipr
*iml
*iws
.gitignore
out/
*apk
src/main/Tests/bin
src/main/Tests/bin/*
src/main/Tests/bin/Tests-debug-unaligned.apk
Run Code Online (Sandbox Code Playgroud)

git

6
推荐指数
2
解决办法
3万
查看次数