我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
当前回答
我认为答案很可怕,但虽然赫奇猪的答案可能更好,但我不认为它能有那么优雅。fetch
和merge
使用定义的战略, 从而保存您本地的更改, 只要它们不是您试图强制覆盖的文件之一 。
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
是此选项的值。 您选择使用their
更改(另一个选项是ours
如果有冲突,则更改。
其他回答
谈到前几个答复中的拉/拉/拉/加,我想分享一个有趣的和有成果的把戏,
git pull --rebase
以上命令是我Git生命中最有用的命令 拯救了很多时间
在将您新承诺推进到服务器之前, 请尝试此命令, 它会自动同步最新的服务器更改( 加上一个抓取+合并) , 并将您的承诺放在 Git 日志的顶部 。 无需担心手动拉动/ 合并 。
查找详细信息"Git pull -rebase"是做什么的?.
这个解决方案总是在运行 。
cd $GIT_ROOT_DIRECTORY
git fetch origin/$TARGET_BRANCH
git rm -rf --cached .
git reset --hard origin/TARGET_BRANCH
git clean -df
git pull origin $TARGET_BRANCH
首先,尝试标准的方式:
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
在某些情况下会失败吗?
自定义规则.gitattributes file
拥有( 拥有)eol=lf
. givatritites 中的规则可能导致 Git 将 CRLF 线条转换为某些文本文件中的 LF , 从而修改某些文件更改 。
如果情况如此,你必须实施这些CRLLF/LF的改变(通过在git status
),或尝试:git config core.autcrlf false
暂时忽视他们。
文件系统不兼容
当您使用不支持权限属性的文件系统时。 例如, 您有两个仓库, 一个在 Linux/ Mac (Linux/ Mac) 上 。ext3
/hfs+
和另一个基于FAT32/NTFS的文件系统。
您注意到,有两种不同的文件系统, 所以不支持 Unix 权限的系统基本上不能在不支持这种权限的系统上重置文件权限, 所以不管如何--hard
你试试看,GIT总能察觉到一些"变化"
尽管这个问题已经有许多答案,但最初的问题是解决这个问题。
错误: 未跟踪的工作树文件“ public/images/icon. gif” 会被合并覆盖
由于二进制文件无法合并, 简单的答案是
git checkout public/images/icon.gif
有了这个文件,文件就会恢复到它在这个分支的原有状态。
我平平平平平平平平git stash
如果我不想失去我的改变或类似的东西git checkout .
如果我不在乎本地修改的文件的话 海事组织比海事组织简单得多reset --hard
, clean
...所有这些东西更适合 离开分支的远程, 包括承诺,未跟踪的文件, 而不是仅仅解决一个本地修改过的文件。
步骤1。 (可选择)
从本地主控件库的根根, 保存备份和空当前文件夹:
mkdir -p ../<branch>-bkp && mv --backup=t * ../<branch>-bkp
步骤2从远程仓库下载分支的所有文件和文件夹 :
git checkout <branch> && git add -A . && git reset --hard origin/<branch> && git pull
替换位置<branch>
使用要覆盖的分支的名称。
评论:
git pull
内步骤2,git reset --hard
会git reset --hard origin/<branch_to_overwrite>
不要先从本地主控库删除所有文件和文件夹, 请小心, 任何仍然埋在周围的垃圾文件都可能偷偷潜入远程仓库 。git push
即使这不是你的本意git add -A .
内步骤2如果您选择退出, 防止发生这种情况步骤1.参考文献:
https://gitforwindows.org/
https://www.atlassian.com/git/tutorials/undoing-changes/git-reset
https://www.atlassian.com/git/tutorials/rewriting-history/git-reflog