如何强制“ git pull”覆盖本地文件?

如何在git pull上强制覆盖本地文件?

该场景如下:

  • 团队成员正在修改我们正在工作的网站的模板
  • 他们正在将一些图像添加到图像目录(但是忘记在源代码控制下添加它们)
  • 他们通过邮件将图像发送给我
  • 我将图像添加到源代码管理下,并将其与其他更改一起推送到GitHub
  • 他们无法从GitHub提取更新,因为Git不想覆盖其文件。

这是我得到的错误:

错误:未跟踪的工作树文件“ public / images / icon.gif”将被合并覆盖

如何强制Git覆盖它们? 这个人是设计师-通常我会手工解决所有冲突,因此服务器具有他们只需在计算机上更新的最新版本。


#1楼

像刺猬一样,我认为答案很糟糕。 但是,尽管刺猬的答案可能更好,但我认为它并没有它的优雅。 我发现做到这一点的方法是通过使用已定义策略的“提取”和“合并”。 应该这样做,以便保留本地更改,只要它们不是您要强制覆盖的文件之一即可。

首先提交您的更改

 git add *
 git commit -a -m "local file server commit message"

然后获取更改并在发生冲突时覆盖

 git fetch origin master
 git merge -s recursive -X theirs origin/master

“ -X”是选项名称,“ theirs”是该选项的值。 如果发生冲突,您选择使用“他们的”更改,而不是“您的”更改。


#2楼

看来最好的方法是先这样做:

git clean

要删除所有未跟踪的文件,然后继续执行常规的git pull ...


#3楼

首先,尝试标准方法:

git reset HEAD --hard # To remove all not committed changes!
git clean -fd         # To remove all untracked (non-git) files and folders!

警告 :仅当您未提交上述命令时,它们才会导致数据/文件丢失!如果不确定,请首先备份整个存储库文件夹。

然后再次拉。

如果上述方法无济于事,并且您不关心未跟踪的文件/目录(为防万一,请首先进行备份),请尝试以下简单步骤:

cd your_git_repo  # where 'your_git_repo' is your git repository folder
rm -rfv *         # WARNING: only run inside your git repository!
git pull          # pull the sources again

这将删除所有git文件(不包括.git/ dir,您拥有所有提交),然后再次将其拉出。


为什么git reset HEAD --hard在某些情况下可能会失败?

  1. .gitattributes file自定义规则

    在.gitattributes中使用eol=lf规则可能会导致git通过将某些文本文件中的CRLF行尾转换为LF来修改某些文件更改。

    如果是这样,您必须提交这些CRLF / LF更改(通过在git status查看它们),或尝试: git config core.autcrlf false以暂时忽略它们。

  2. 文件系统不兼容

    当您使用不支持权限属性的文件系统时。 在示例中,您有两个存储库,一个在Linux / Mac( ext3 / hfs+ )上,另一个在基于FAT32 / NTFS的文件系统上。

    你可能注意到了,有两种不同类型的文件系统,所以不支持Unix许可基本上无法重置系统不支持那种权限的文件权限的一个,所以无论怎么--hard你尝试一下,git总是检测到一些“变化”。


#4楼

所有这些解决方案的问题在于它们要么太复杂,要么甚至更大的问题在于它们从Web服务器中删除了所有未跟踪的文件,我们不希望这样做,因为始终存在需要的配置文件。服务器,而不是在Git存储库中。

这是我们正在使用的最干净的解决方案:

# Fetch the newest code
git fetch

# Delete all files which are being added, so there
# are no conflicts with untracked 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值