mae*_*mae 503 git git-stash git-pull
如何在Git pull上忽略以下错误消息?
合并将覆盖对以下文件的本地更改
如果我想覆盖它们怎么办?
我尝试了类似的东西git pull -f,但没有任何作用.
要清楚,我只想覆盖特定的变化,而不是一切.
Dan*_*rth 381
如果要从工作副本中删除所有本地更改,只需将其存储:
git stash save --keep-index
Run Code Online (Sandbox Code Playgroud)
如果你不再需要它们,你现在可以放弃那个藏匿处:
git stash drop
Run Code Online (Sandbox Code Playgroud)
如果您只想覆盖本地更改的特定部分,则有两种可能:
提交您不想覆盖的所有内容,并使用上面的方法来完成剩下的工作.
使用git checkout path/to/file/to/revert您要覆盖更改.确保该文件不是通过分阶段进行的git reset HEAD path/to/file/to/revert.
mae*_*mae 282
好的,在其他两个答案的帮助下,我想出了一个直接的解决方案:
git checkout HEAD^ file/to/overwrite
git pull
Run Code Online (Sandbox Code Playgroud)
kra*_*s88 194
这对我来说可以覆盖所有本地更改,并且不需要标识:
git reset --hard
git pull
Run Code Online (Sandbox Code Playgroud)
Aft*_*ock 72
这是一个抛弃分阶段变化的解决方案:
git reset file/to/overwrite
git checkout file/to/overwrite
Run Code Online (Sandbox Code Playgroud)
Bri*_*uch 72
这里的答案太多了,我不想再添加一个,但以上所有答案都比它们需要的更笨拙。我必须一直这样做,因为 Git 似乎变得困惑并说我修改了没有改变的文件(无法恢复,因为它们没有改变,但我不能拉,因为它们应该已经改变了)最简单和到目前为止我发现的最快的是:
git stash
git stash drop
git pull
Run Code Online (Sandbox Code Playgroud)
注意:本地更改将丢失
Sun*_*mar 60
您可以在进行合并之前提交更改,也可以存储它们:
git stash savegit merge origin/mastergit stash poppab*_*asc 42
如果要在一个文件上放弃本地更改,可以执行以下操作:
git checkout -- <file>
Run Code Online (Sandbox Code Playgroud)
然后你可以使用最新版本覆盖文件[s]:
git pull
Run Code Online (Sandbox Code Playgroud)
Eug*_*kov 20
git pull --rebase --autostash
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)-r, --rebase[=false|true|merges|preserve|interactive] When true, rebase the current branch on top of the upstream branch after fetching. If there is a remote-tracking branch corresponding to the upstream
Run Code Online (Sandbox Code Playgroud)--autostash, --no-autostash Before starting rebase, stash local modifications away if needed, and apply the stash entry when done
我不知道为什么还没有回答这个问题,但是正如您所看到的,解决方案很简单。这里的所有答案都表明相同:删除/保存您的本地更改并应用到上游,然后(如果您save)在顶部应用您的本地更改。
分git pull --rebase --autostash步做什么:
1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory
Run Code Online (Sandbox Code Playgroud)
我的情况(可能也是你的):
我有本地更改(工作目录中的更改):
当我尝试拉远程更改时,出现错误:
此更改不与本地更改相交:
因此,当我自动pull --rebase --autostash保存和应用本地更改时没有任何问题
Nik*_*K R 17
如果您的存储库包含一些从master以下位置删除的文件:
git checkout mastergit fetch origingit reset --hard origin/mastergit checkout -b newbranchJer*_*acs 11
有时,这些都不起作用.令人讨厌的是,由于我认为LF的事情,将会删除文件,然后拉动.并不是我推荐这个解决方案,但如果文件不存在,git将无法通知您,您的更改(甚至可能不会更改)将被覆盖,并且会让您继续.
使用风险由您自己承担.
git stash save --keep-index 没有为我工作。
下面的命令按预期工作。
git reset --hard
git pull
Run Code Online (Sandbox Code Playgroud)
如果不需要,它将覆盖所有本地更改。
在最近的Git中,您可以添加-r/ --rebaseon pull命令在获取后在上游分支的顶部重新绑定当前分支.警告应该消失,但是您可能会遇到一些需要解决的冲突.
或者你可以用力检查不同的分支,然后再回去master,例如:
git checkout origin/master -f
git checkout master -f
Run Code Online (Sandbox Code Playgroud)
然后像往常一样再次拉它:
git pull origin master
Run Code Online (Sandbox Code Playgroud)
使用此方法可以节省您从stashing(git stash)和潜在的权限问题,重置文件(git reset HEAD --hard),删除文件(git clean -fd)等的时间.此外,它更容易记住.
这个问题是因为您已经在文件/本地进行了更改,并且存在与Git存储库中的更改相同的文件,因此在拉/推之前,您需要存储本地更改:
要覆盖单个文件的本地更改:
git reset file/to/overwrite
git checkout file/to/overwrite
Run Code Online (Sandbox Code Playgroud)
要覆盖所有本地更改(所有文件中的更改):
git stash
git pull
git stash pop
Run Code Online (Sandbox Code Playgroud)
此问题也可能是因为您处于未与主分支合并的分支上.
这对我有用,可以丢弃实时远程服务器上的更改并从源代码控制 GitHub 中提取:
git reset --hard
git pull origin master
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我解决问题的策略。
问题陈述
我们需要对 10 多个文件进行更改。我们试过了PULL (git pull origin master),但 Git 喊道:
错误:您对以下文件的本地更改将被合并覆盖:请在合并之前提交您的更改或隐藏它们。
我们尝试执行commit然后pull,但它们也不起作用。
解决方案
我们实际上处于脏阶段,因为文件在“暂存区”又名“索引区”中,有些在“头区”又名“本地 Git 目录”中。我们想从服务器中提取更改。
以清晰的方式查看此链接以获取有关 Git 不同阶段的信息:GIT Stages
我们按照以下步骤
git stash (这使我们的工作目录变得干净。您的更改由 Git 存储在堆栈中)。git pull origin master (从服务器拉取更改)git stash apply (应用堆栈中的所有更改)git commit -m 'message' (提交更改)git push origin master (将更改推送到服务器)git stash drop (放下堆栈)让我们了解您何时以及为何需要藏匿
如果您处于脏状态,则意味着您正在对文件进行更改,然后由于任何原因,您被迫拉取或切换到另一个分支以执行某些非常紧急的工作,因此此时您无法拉取或切换,直到您提交更改。该stash命令是这里作为一个伸出援助之手。
从书ProGIT,第 2 版:
通常,当您一直在处理项目的一部分时,事情处于混乱状态,并且您想暂时切换分支以处理其他事情。问题是,您不想提交一半的工作,只是为了以后可以回到这一点。这个问题的答案是 git stash 命令。Stashing 会获取您工作目录的脏状态——即您修改过的跟踪文件和暂存更改——并将其保存在一堆未完成的更改中,您可以随时重新应用这些更改。
小智 6
如果您想在服务器上保留生产更改,只需合并到新的配置项中即可。处理方法如下:
git stash
git pull
git stash pop
Run Code Online (Sandbox Code Playgroud)
也许您没有执行所有操作。你可以知道接下来可以做什么。
git reset --hard && git clean -df
注意:这将重置并删除任何未跟踪的文件。
解决这个问题的最好方法是:
git checkout -- <path/file_name>
Run Code Online (Sandbox Code Playgroud)
之后,您可以通过以下方式覆盖文件:
git pull origin master
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个
git fetch --all
git reset --hard origin/master
git pull origin master
Run Code Online (Sandbox Code Playgroud)
强制拉动对我来说是有效的