Gwy*_*fey 2391 git version-control git-merge merge-conflict-resolution git-merge-conflict
我使用过git pull并且发生了合并冲突:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
Run Code Online (Sandbox Code Playgroud)
我知道该文件的其他版本是好的,我的是坏的所以我的所有更改都应该放弃.我怎样才能做到这一点?
Pat*_*otz 2119
由于您pull未成功,因此HEAD(不HEAD^)是您分支上的最后一次"有效"提交:
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
你想要的另一件事是让他们的改变超越你的改变.
较旧版本的git允许您使用"他们的"合并策略:
git pull --strategy=theirs remote_branch
Run Code Online (Sandbox Code Playgroud)
但是这已被删除,正如Junio Hamano(Git维护者)在此消息中所解释的那样.如链接中所述,您可以这样做:
git fetch origin
git reset --hard origin
Run Code Online (Sandbox Code Playgroud)
Car*_*arl 1866
如果你的git版本是> = 1.6.1,你可以使用git reset --merge.
另外,正如@Michael Johnson所提到的,如果你的git版本> = 1.7.4,你也可以使用git merge --abort.
与往常一样,确保在开始合并之前没有未提交的更改.
git merge --abort相当于git reset --merge什么时候MERGE_HEAD存在.
MERGE_HEAD 合并正在进行时存在.
此外,关于开始合并时未提交的更改:
如果您有更改,则在开始合并之前不想提交,只需git stash在合并之前以及git stash pop完成合并或中止之后提交.
ign*_*nis 487
git merge --abort
Run Code Online (Sandbox Code Playgroud)
中止当前的冲突解决过程,并尝试重建合并前的状态.
如果在合并开始时存在未提交的工作树更改,
git merge --abort则在某些情况下将无法重建这些更改.因此,建议在运行git merge之前始终提交或存储您的更改.
git merge --abort相当于git reset --merge什么时候MERGE_HEAD存在.
http://www.git-scm.com/docs/git-merge
Jag*_*hal 136
它如此简单.
git merge --abort
Run Code Online (Sandbox Code Playgroud)
当您遇到此类问题并运行git status命令时,Git会向您显示解决方案.
git status
Run Code Online (Sandbox Code Playgroud)
希望这会对人们有所帮助.
Dav*_*ous 92
我认为这是git reset你需要的.
请注意,这git revert意味着一些非常不同的东西,比如说,svn revert在Subversion中,revert会丢弃你的(未提交的)更改,将文件从存储库返回到当前版本,而git revert"撤消"提交.
git reset应该做相当于svn revert,即丢弃你不想要的更改.
CB *_*ley 75
在这个特定的用例中,您并不想真正中止合并,只需以特定方式解决冲突.
也没有特别需要重置和执行与不同策略的合并.git正确地突出了冲突,并且接受另一方更改的要求仅适用于这一个文件.
对于冲突中的未合并文件,git使索引中的文件的公共基础,本地和远程版本可用.(这是读取它们用于三向差异工具的地方git mergetool.)您可以使用它git show来查看它们.
# common base:
git show :1:_widget.html.erb
# 'ours'
git show :2:_widget.html.erb
# 'theirs'
git show :3:_widget.html.erb
Run Code Online (Sandbox Code Playgroud)
解决冲突以逐字使用远程版本的最简单方法是:
git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb
Run Code Online (Sandbox Code Playgroud)
或者,使用git> = 1.6.1:
git checkout --theirs _widget.html.erb
Run Code Online (Sandbox Code Playgroud)
Han*_*bib 64
对于 git >= 1.6.1:
git merge --abort
Run Code Online (Sandbox Code Playgroud)
对于旧版本的 git,这将完成这项工作:
git reset --merge
Run Code Online (Sandbox Code Playgroud)
或者
git reset --hard
Run Code Online (Sandbox Code Playgroud)
The*_*hal 48
您可以中止合并步骤:
git merge --abort
Run Code Online (Sandbox Code Playgroud)
否则你可以保留你的更改(你在哪个分支上)
git checkout --ours file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
否则您可以保留其他分支更改
git checkout --theirs file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
Mar*_*n G 35
由于评论表明这git reset --merge是别名git merge --abort,因此值得注意的git merge --abort是,只有git reset --merge当a MERGE_HEAD存在时才相等.这可以在git help for merge命令中读取.
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.
Run Code Online (Sandbox Code Playgroud)
合并失败后,如果没有合并,MERGE_HEAD则失败的合并可以撤消,git reset --merge但不一定是撤消git merge --abort,因此它们不仅是同一事物的旧语法和新语法.
就个人而言,我发现git reset --merge对于类似于上述场景的场景更加强大,并且一般来说合并失败.
Nir*_*hta 26
如果您最终遇到合并冲突并且没有任何事情要提交但仍然在应用所有下面提到的命令后仍然显示合并错误,
git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin
Run Code Online (Sandbox Code Playgroud)
请删除
git的\ index.lock
文件[在恢复的情况下将粘贴剪切到其他位置]然后根据您想要的版本输入以下任何命令.
git reset --hard HEAD
git reset --hard origin
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
naa*_*eya 26
For scenario like this, I did git fetch and git pull, then realized that upstream branch was not master branch, which resulted in unwanted conflicts.
git reset --merge
Run Code Online (Sandbox Code Playgroud)
This reverted back without resetting my local changes.
Dan*_*iel 21
可能不是OP想要的,但对我来说,我尝试将稳定分支合并到功能分支,但存在太多冲突。我没有设法重置更改,因为 HEAD 已被多次提交更改,因此简单的解决方案是强制签出到稳定分支。然后您可以签出到另一个分支,它将与合并之前一样。
git checkout -f master
git checkout side-branch
Ala*_*Dea 18
由于Git 1.6.1.3 git checkout已经能够从合并的任何一方结账:
git checkout --theirs _widget.html.erb
Run Code Online (Sandbox Code Playgroud)
Ala*_*Dea 17
另一种保留工作副本状态的替代方法是:
git stash
git merge --abort
git stash pop
Run Code Online (Sandbox Code Playgroud)
我通常建议不要这样做,因为它实际上就像在Subversion中合并一样,因为它会抛弃以下提交中的分支关系.
为了避免陷入此类麻烦,可以扩展该方法并在合并之前git merge --abort创建一个单独的测试分支。
案例:您有一个主题分支,它没有合并,因为您分心/出现了一些事情/您知道但它已经(或已经)准备好了。
现在可以将其合并到 master 中吗?
在测试分支中工作以估计/找到解决方案,然后放弃测试分支并在主题分支中应用该解决方案。
# Checkout the topic branch
git checkout topic-branch-1
# Create a _test_ branch on top of this
git checkout -b test
# Attempt to merge master
git merge master
# If it fails you can abandon the merge
git merge --abort
git checkout -
git branch -D test # we don't care about this branch really...
Run Code Online (Sandbox Code Playgroud)
致力于解决冲突。
# Checkout the topic branch
git checkout topic-branch-1
# Create a _test_ branch on top of this
git checkout -b test
# Attempt to merge master
git merge master
# resolve conflicts, run it through tests, etc
# then
git commit <conflict-resolving>
# You *could* now even create a separate test branch on top of master
# and see if you are able to merge
git checkout master
git checkout -b master-test
git merge test
Run Code Online (Sandbox Code Playgroud)
最后再次检查主题分支,应用测试分支中的修复并继续 PR。最后删除测试和主测试。
涉及?是的,但在我准备好之前,它不会扰乱我的主题或主分支。
| 归档时间: |
|
| 查看次数: |
1625921 次 |
| 最近记录: |