我在本地计算机上做了一些更新,将它们推送到远程存储库,现在我正在尝试将更改提取到服务器,然后收到消息;
错误:合并后将覆盖对以下文件的本地更改:
可湿性粉剂内容/ W3TC-配置/ master.php
请提交您的更改或存储它们,然后才能合并。
所以我跑了,
git checkout -- wp-content/w3tc-config/master.php
再次尝试,我收到同样的消息。我假设w3tc
改变了服务器上配置文件中的内容。我不关心本地副本或远程副本是否在服务器上(我认为远程副本是最好的),我只是希望能够合并其余的更改(插件更新)。
有什么想法吗?
答案 0 :(得分:1090)
您无法与本地修改合并。 Git可以保护您免于丢失潜在的重要更改。
您有三种选择:
git commit -m "My message"
Stashing充当堆栈,您可以在其中推送更改,然后以相反的顺序弹出它们。
要隐藏,请键入
git stash
进行合并,然后拉出藏匿处:
git stash pop
使用git reset --hard
或git checkout -t -f remote/branch
使用git checkout filename
答案 1 :(得分:59)
git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index
第一个命令暂时将您的更改存储在the stash中,并将其从工作目录中删除。
第二个命令切换分支。
第三个命令恢复存储在存储中的更改(--index
选项对于确保暂存的文件仍处于暂存状态非常有用。)
答案 2 :(得分:21)
您可以尝试以下方法之一:
对于简单的更改,在拉动更改时尝试在其上面进行重新定位,例如
git pull origin master -r
因此,它会在获取后将您当前的分支应用于上游分支。
这相当于:checkout master
,fetch
和rebase origin/master
git命令。
这是一种潜在的危险操作模式。它重写了历史,当你已经发布了这段历史时,它并不是一个好兆头。除非您仔细阅读
git-rebase(1)
,否则请勿使用此选项。
如果您不关心本地更改,可以切换到其他分支临时(强制),然后将其切换回来,例如。
git checkout origin/master -f
git checkout master -f
如果您不关心本地更改,请尝试将其重置为HEAD(原始状态),例如
git reset HEAD --hard
如果上面没有帮助,那么它可能是你的git规范化文件(.gitattributes
)中的规则,所以最好提交它所说的内容。或者您的文件系统不支持权限,因此您必须在git配置中禁用filemode
。
答案 3 :(得分:12)
所以我遇到的情况如下:
错误:合并后将覆盖对以下文件的本地更改: 的wp-content / W3TC-配置/ master.php 请在合并之前提交更改或存储更改。
除了之前,它是远程的: 实际上是这样的:
remote:error:合并后将覆盖对以下文件的本地更改: 一些/ file.ext 请在合并之前提交更改或存储更改。
正在发生的事情(我认为,不是百分之百正面)git post receive钩子开始运行并且由于远程服务器存储库中的移动更改而搞砸了,理论上,这不应该被触及。 / p>
所以我最后通过跟踪post-receive钩子找到了这个,不得不去服务器上的远程存储库,并且有更改(这不在我的本地存储库,其中,事实上,它说匹配,没有变化,没有任何提交,最新等等。)所以在本地,没有变化,在服务器上,然后我做了git checkout -- some/file.ext
然后本地和远程存储库实际匹配,我可以继续工作,并部署。不完全确定这种情况是如何发生的,尽管有几十个开发人员加上IT变更可能与它有关。
答案 4 :(得分:8)
试试这个
git stash save ""
然后再次尝试拉
答案 5 :(得分:3)
就我而言,我不想保留文件,因此对我有用:
Git 2.11及更高版本:
git clean -d -fx .
旧版Git:
git clean -d -fx ""
参考: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x表示还将删除忽略的文件以及git未知的文件。
-d表示除了删除未跟踪的文件之外,还删除未跟踪的目录。
-f强制其运行。
答案 6 :(得分:3)
这解决了我的错误:
我在分支机构:“ A”
git stash
移至主分支:
git checkout master
git pull
返回我的分支:“ A”
git checkout A
git stash pop
答案 7 :(得分:3)
这对我来说很有效:
git reset --hard
然后
git pull origin <*current branch>
之后
git checkout <*branch>
答案 8 :(得分:2)
答案 9 :(得分:0)
在使用 reset 之前,请考虑使用 revert,这样您就可以随时返回。
https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert
应要求
来源:https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert
git reset vs git revert sonic0002 2019-02-02 08:26:39
当使用git等版本控制系统维护代码时,我们不可避免地需要回滚一些由于错误或临时代码恢复而导致的错误提交。在这种情况下,新手开发人员会非常紧张,因为他们可能会迷失在不影响他人的情况下回滚他们的更改应该做的事情,但对于资深开发人员来说,这是他们的日常工作,他们可以向您展示不同的方法来做到这一点。 在这篇文章中,我们将介绍开发者经常使用的两大类。
它们的区别和对应的用例是什么?我们将在下面详细讨论它们。 重置 假设我们有以下几个提交。
提交 A 和 B 是工作提交,但提交 C 和 D 是错误提交。现在我们要回滚到提交 B 并删除提交 C 和 D。目前 HEAD 指向提交 D 5lk4er,我们只需要将 HEAD 指向提交 B a0fvf8 即可实现我们想要的。 使用 git reset 命令很容易。
git reset --hard a0fvf8
但是现在远程origin还是有HEAD指向commit D,如果我们直接用git push推送修改,不会更新远程repo,需要加一个 -f 选项强制推送更改。
git push -f
这种方法的缺点是一旦重置完成,HEAD 之后的所有提交都会消失。万一有一天我们发现一些提交吃了好东西并想保留它们,那就太晚了。正因为如此,许多公司禁止使用这种方法来回滚更改。
git 还原 git revert 的用途是创建一个新的提交来恢复之前的提交。 HEAD 将指向新的恢复提交。 对于上面的 git reset 示例,我们需要做的只是还原提交 D,然后还原提交 C。
git revert 5lk4er
git revert 76sdeb
在上面的例子中,我们只有两个提交要还原,所以我们可以一一还原。但是如果有很多提交要还原呢?我们确实可以还原一个范围。
git revert OLDER_COMMIT^..NEWER_COMMIT
这种方法没有git reset的缺点,它会将HEAD指向新创建的恢复提交,并且可以直接将更改推送到远程而不使用-f< /strong> 选项。 现在让我们看一个更困难的例子。假设我们有三个提交,但错误的提交是第二个提交。
使用 git reset 回滚提交 B 不是一个好主意,因为我们需要保留提交 C,因为它是一个好的提交。现在我们可以恢复提交 C 和 B,然后使用 cherry-pick 再次提交 C。
从上面的解释,我们可以发现git reset和git revert最大的区别在于git reset会将分支的状态重置为之前的状态通过删除所需提交后的所有更改,而 git revert 将通过创建新的恢复提交并保留原始提交来重置为以前的状态。建议在企业环境中使用 git revert 而不是 git reset 。 参考:https://kknews.cc/news/4najez2.html
答案 10 :(得分:0)
放弃本地更改
使用git reset --hard
答案 11 :(得分:0)
可能
git --rebase --autostash
将提供帮助
答案 12 :(得分:0)
如果您使用的是 Git扩展 ,则应该可以在Working directory
中找到本地更改,如下所示:
如果看不到任何更改,则可能是因为您使用了错误的子模块。因此,请检查所有带有潜艇图标的物品,如下所示:
当您发现一些未提交的更改时:
使用Working directory
选择行,导航至 Diff 标签,然后用铅笔(或+
或{{1 }})图标上,选择 重置为首次提交 ,或者提交或隐藏或您要对其进行任何操作。
答案 13 :(得分:0)
对我来说,此方法最有效,而不是隐藏。我想引入最新更改,并保留我的本地更改的副本,然后再应用。
git add .
git diff --cached > mypatch.patch
git reset --hard
git pull
git apply mypatch.patch
Git将合并更改并为未合并的更改创建.rej文件。
享受功能的持续工作,完成后进行本地更改。
答案 14 :(得分:0)
对我来说,只有git reset --hard
有效。
因为没有什么可提交的,所以不能选择提交。
无法隐藏存储,因为没有可存储的东西。
看起来它可能来自.git/info/exclude
中排除的文件,并且git update-index --assume-unchanged <file>
处理了一些文件。
答案 15 :(得分:0)
我尝试了第一个答案:得分最高的git stash
,但仍然弹出错误消息,然后我发现本文要提交更改而不是隐藏'Reluctant Commit'
,错误消息终于消失了:
1:git add .
2:git commit -m "this is an additional commit"
3:git checkout the-other-file-name
然后它起作用了。希望这个答案有帮助。:)
答案 16 :(得分:0)
这可能是由CRLF问题引起的。
请参阅:Why should I use core.autocrlf=true in Git?
使用此按钮强制执行更新:
git pull origin master
git checkout origin/master -f
答案 17 :(得分:0)
在我的情况下,我备份然后删除了Git抱怨,提交的文件,然后我终于检查了另一个分支。
然后我替换了文件,复制回内容并继续,好像什么也没发生。