mar*_*ion 796 git gitignore git-merge
所以我在.gitignore文件中添加了一个文件夹.
一旦我做了git status
它告诉我
# On branch latest
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更改分支时,我得到以下内容:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)
这就是我的.gitignore文件的样子:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Run Code Online (Sandbox Code Playgroud)
我如何使这个工作,所以我可以切换分支而不删除这些文件?
如果我进行更改,它会影响这些文件吗?换句话说,如果我之后回到这个分支,那么一切都是完美的,直到我最近的提交?
我不想丢失那些文件,我只是不希望它们被跟踪.
小智 1003
我也点击了这条消息.在我的情况下,我不想保留文件,所以这对我有用:
git clean -d -f .
Run Code Online (Sandbox Code Playgroud)
git clean -d -f ""
Run Code Online (Sandbox Code Playgroud)
如果您还想删除git忽略的文件,请执行以下命令.
git clean -d -fx .
Run Code Online (Sandbox Code Playgroud)
git clean -d -fx ""
Run Code Online (Sandbox Code Playgroud)
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
表示被删除的文件也被删除以及git未知的文件.
-d
表示除了未跟踪的文件之外删除未跟踪的目录.
-f
需要强制它运行.
Rég*_*gis 563
警告:这将删除未编制索引的本地文件
强迫它: git checkout -f another-branch
Arr*_*ter 256
您似乎希望忽略这些文件,但它们已经被提交了..gitignore对已存在于repo中的文件没有影响,因此需要将其删除git rm --cached
.这--cached
将防止它对您的工作副本产生任何影响,并且它将在下次提交时标记为已删除.从repo中删除文件后,.gitignore将阻止再次添加它们.
但是你的.gitignore有另外一个问题,你过度使用通配符并导致它匹配的次数少于预期.而是让我们改变.gitignore并试试这个.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Run Code Online (Sandbox Code Playgroud)
mat*_*sta 138
如果您使用的是OS X,则可能是因为文件的名称已更改了某些字符.尝试设置以下配置选项:
git config core.ignorecase true
Run Code Online (Sandbox Code Playgroud)
Gre*_*ill 42
Git告诉你它想要创建文件(名为public/system/images/9/...
etc),但是你已经在该目录中有了Git 没有跟踪的现有文件.也许其他人将这些文件添加到Git存储库中,这是您第一次切换到该分支?
这可能是您develop
分支中的文件而不是当前分支中的原因.您可能需要询问您的合作者为什么会这样.
如何让这个工作,所以我可以切换分支而不删除这些文件?
如果不使文件以某种方式消失,你就无法做到.你现在可以重命名public
为my_public
或者什么.
如果我之后回到这个分支,那么一切都是完美的,直到我最近的提交?
如果您提交更改,Git不会丢失它们.如果你没有提交你的更改,那么Git会非常努力地不要覆盖你所做的工作.这就是Git在这里第一次警告你的事情(当你试图切换分支时).
小智 29
这对我有用.
1. git fetch --all
2. git reset --hard origin/{branch_name}
Run Code Online (Sandbox Code Playgroud)
Abh*_*oel 22
这个微妙的任务有一个命令(永久删除未跟踪的文件)
git clean -i
Run Code Online (Sandbox Code Playgroud)
然后git pull
会做.
In-*_*ung 13
这两个函数
git rm --cached
git checkout -f another-branch
没有为我工作。
相反,我按照 Git 告诉您的操作(在 Eclipse 中)物理删除了该文件;
Please move or remove them before you can switch branches.
Run Code Online (Sandbox Code Playgroud)
然后我添加/提交它。
然后我拉了它,它起作用了!
sab*_*zdi 13
这个命令解决了我的问题:
git add *
git stash
git pull
Run Code Online (Sandbox Code Playgroud)
Kyl*_*egg 12
不幸的是,没有git rm --cached
或git clean -d -fx ""
为我做过.
我的解决方案最终是将我的分支推送到远程,克隆一个新的仓库,然后在新的仓库中进行合并.访问回购的其他人也必须这样做.
故事的道德:.gitignore
从一开始就使用文件.
mc_*_*ser 12
对于那些需要比Scott Schafer的回答不那么深远的人来说,
git clean -f
Run Code Online (Sandbox Code Playgroud)
可能会奏效.我强烈建议跑步
git clean --dry-run
Run Code Online (Sandbox Code Playgroud)
第一.该命令将输出Git将在您运行时删除的文件列表git clean -f
,并可能为您省去无意中删除您不想要的内容的痛苦.
有关详细信息,请参阅此Stack Oveflow答案或文档git clean
.
基于先前的提交签出分支时遇到了同样的问题.由于未跟踪的文件,Git拒绝结账.
我找到了一个解决方案,我希望它也能帮到你.
将受影响的目录添加到它们.gitignore
并$ git rm -r --cached
在它们上发布显然是不够的.
假设你想根据早期的提交K创建一个分支来测试一些东西并回到当前版本.我会按以下步骤进行:
设置未跟踪的文件:编辑.gitignore
并应用$ git rm -r --cached
您希望git忽略的文件和目录.添加文件.gitignore
本身.gitignore
,不要忘记发布$ git rm -r --cached .gitignore
.这将确保git的忽略行为在早期提交中保持不变.
提交您刚才所做的更改:
$ git add -A
$ git commit
保存当前日志,否则您可能会遇到回到当前版本的问题
$ git log > ../git.log
硬重置为提交K.
$ git reset --hard version_k
根据提交K创建分支
$ git branch commit_k_branch
结帐进入该分行
$ git checkout commit_k_branch
做你的东西并提交它
再次结帐回主人
$ git checkout master
再次重置为当前版本
$ git reset current_version
要么 $ git reset ORIG_HEAD
现在你可以很难重置HEAD
git reset --hard HEAD
注意!不要跳过倒数第二步(例如$ git reset --hard ORIG_HEAD
),否则上面抱怨的未跟踪文件git会丢失.
我还确保git抱怨的文件没有被删除.我将它们复制到文本文件并发出命令$ for i in $(cat ../test.txt); do ls -ahl $i; done
如果您再次检查上述分支,请不要忘记发出$ git status
以确保不会出现不需要的更改.
在Windows 8系统上发生这种情况,在命令提示符下使用Git.我团队的其他成员使用TFS,我使用Microsoft的git-tf在TFS和我的本地Git存储库之间进行推送/拉取.
问题出现是由于一些文件已经重命名只是为了改变他们的情况.似乎发生了什么是这样的:
git status
,我看不到任何更改,因为在Windows命令提示符下,这些文件名是等效的.对我来说最简单的解决方案是:
git checkout
该项目的先前版本,远在这些文件被添加之前.git checkout
是项目的最新版本,具有正确的文件框.小智 5
就我而言,问题出在子模块上。master
与另一个分支合并,为项目添加了一个新的子模块。我试图结帐的分支没有它,这就是为什么 git 抱怨未跟踪的文件并且没有其他建议的解决方案对我有用。我强迫结帐到我的新分支,并拉了主人。
git checkout -f my_branch
git pull origin master
git submodule update --init