如何在不提交的情况下解决git隐藏冲突?
同样,我还想知道如何在不向提交添加所有修改的情况下解决冲突的如何在不提交的情况下解决git隐藏冲突?,git,git-stash,Git,Git Stash,同样,我还想知道如何在不向提交添加所有修改的情况下解决冲突的git stash pop(就像没有冲突的“git stash pop”) 我目前的做法非常不酷,因为我是这样做的: git stash pop#->冲突 吉特储藏液 #[解决冲突] #[添加冲突文件] git复位头# 如何复制: mkdirfoo;cd-foo;初始化 回声“1”>1 回声“2”>2 git-add-A;git提交-m“第一” 回声“1.1”>1 回声“2.1”>两个 暂存 回声“2.2”>两个 git提交-a-m
git stash pop
(就像没有冲突的“git stash pop”)
我目前的做法非常不酷,因为我是这样做的:
git stash pop#->冲突
吉特储藏液
#[解决冲突]
#[添加冲突文件]
git复位头#
如何复制:
mkdirfoo;cd-foo;初始化
回声“1”>1
回声“2”>2
git-add-A;git提交-m“第一”
回声“1.1”>1
回声“2.1”>两个
暂存
回声“2.2”>两个
git提交-a-m“秒”
echo“只有此文件才能保留在头部而不发生冲突”>第三个
git添加第三个
吉特隐藏流行音乐
git状态
2016-06-27:在示例中添加了一个名为“third”的新文件,以表明类似scy解决方案的解决方案仅适用于空磁头,但无法解决磁头没有与
git stash pop
相同内容且没有冲突的初始问题。而不是添加您为解决冲突所做的更改,您可以使用git reset HEAD file
来解决冲突,而无需转移更改
但是,您可能必须运行此命令两次。一次将冲突标记为已解决,一次取消显示冲突解决例行程序进行的更改
有可能会有一个重置模式同时执行这两项操作,尽管现在没有。这似乎是您正在寻找的答案,我还没有亲自尝试过,但它似乎可以做到这一点。有了这个命令,GIT将尝试像以前一样应用更改,而不尝试为提交添加所有更改
git隐藏应用——索引
以下是完整的解释:
假设您有这样一个场景,您将更改隐藏起来,以便从源代码中提取。可能是因为您的本地更改在某些设置文件中只是
debug:true
。现在你拉,有人在那里引入了一个新的设置,造成了冲突
git状态
显示:
# On branch master
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: src/js/globals.tpl.js
no changes added to commit (use "git add" and/or "git commit -a")
现在我的工作副本处于我想要的状态,但是我创建了一个我不想要的提交。如何在不修改工作副本的情况下摆脱该提交?等等,有一个流行的命令
git reset HEAD^
我的工作副本尚未更改,但WIP提交已消失。那正是我想要的!(请注意,我在这里没有使用--soft
,因为如果在您的存储中有自动合并的文件,它们是自动暂存的,因此在重置后,您将再次暂存这些文件。)
但还有一件事要做:git stash pop
的手册页提醒我们“应用状态可能会因冲突而失败;在这种情况下,它不会从隐藏列表中删除。您需要手动解决冲突,然后手动调用git stash drop
”。因此,这正是我们现在所做的:
git stash drop
完成。
git stash branch
将起作用,它将为您创建一个新的分支,请签出
当你把你的作品藏起来,重新应用你的作品,然后
然后,如果成功应用,则放弃隐藏。检查
为我工作
注意:这可能很危险,因为它不会尝试将隐藏的更改合并到工作副本中,而是用隐藏的文件覆盖它。因此,您可能会丢失未提交的更改。不要遵循其他答案
好吧,你可以跟着他们:)。但我不认为执行提交然后重置分支以删除该提交以及其他答案中建议的类似解决方法是解决此问题的干净方法
清洁溶液
以下解决方案对我来说似乎更干净,而且也是Git本身建议的-尝试在存储库中执行Git status
,但存在冲突:
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
对默认行为的解释
有两种方法可以将冲突标记为已解决:git add
和git reset
。当git reset
将冲突标记为已解决并从索引中删除文件时,git add
也将冲突标记为已解决,但将文件保留在索引中
在冲突解决后将文件添加到索引是故意的。通过这种方式,您可以将更改与以前的存储以及冲突解决后所做的更改区分开来。如果您不喜欢它,可以始终使用git reset
删除索引中的所有内容
合并工具
我强烈建议使用任何一种方法来解决冲突,例如,等等,而不是手动执行。它通常自动解决所有或大部分冲突。它大大节省了时间 根据,在解决了冲突后,git add
是正确的做法
在阅读之后,我了解到更改会自动添加到索引中(通过设计)。这就是为什么
git add
完成冲突解决过程。我找到的最快方法是解决冲突,然后执行git add-u
,然后执行git reset HEAD
,这甚至不涉及提交
git add .
git reset
git add。
将暂存所有文件,告诉git您已解决冲突
git reset
将取消所有暂存文件的暂存,而不创建提交这不是最好的方法,但它可以工作:
$ git stash apply
$ >> resolve your conflict <<
$ >> do what you want to do with your code <<
$ git checkout HEAD -- file/path/to/your/file
$git隐藏应用
$>>解决冲突>对代码执行您想执行的操作没有问题。您需要的是一个简单的git重置头
,因为它使您的文件保持修改状态,就像一个无冲突的git隐藏弹出窗口
唯一的问题是,您的冲突文件仍将具有冲突标记,git将不再将其报告为冲突
$ git stash pop
# ...resolve conflict(s)
$ git reset
$ git stash drop
git add .
git reset
$ git stash apply
$ >> resolve your conflict <<
$ >> do what you want to do with your code <<
$ git checkout HEAD -- file/path/to/your/file