git合并两个提交
我不确定这是否是重复的,我不是git专家,所以原谅我可能看起来像一个愚蠢的问题。
我有一个文件。 我编辑它,保存并执行这些更改。
我忘了我已经完成了这个工作,并编辑了该文件的原始版本(恰好在另一个编辑器窗口中打开),保存并提交了一组不同的更改。
因此我有两个连续的提交。
我想生成一个git merge
样式文件,并在两者之间产生冲突,以便我可以编辑并解决冲突。
Git认为它可以使用所有较新的文本并丢弃旧的文本。
我已经尝试了git merge
和git merge -no-ff
组合,但不能真正解决做什么问题。
我也不确定要使用哪些搜索条件。
更新:
只是要清楚,我最终想要的是一个git merge
冲突的文件。 我可以很容易地看到使用git diff
的两个文件之间的git diff
但是输出不容易编辑。 我认为git可能有一种简单的方法来说“这两个提交以这种方式冲突......”,因为它必须能够在某个级别上做到这一点。
如果你只是试图合并这两个提交,那么Git会(正确地)认识到一个基于另一个提交,并且不会为它产生冲突。 毕竟,对Git来说,历史看起来像这样:
master
↓
* ---- X ---- A ---- B
B
是一个改变A
具有的东西的提交。 从版本X
查看文件状态时,Git无法知道您是否创建了B
所以你必须改变这个事实,所以Git将使用X
作为A
和B
。 所以让我们先为基础创建一个分支:
git branch base X
这导致:
base master
↓ ↓
* ---- X ---- A ---- B
现在,我们切换到base
并从B
检出文件并提交该更改(这实质上是从B
复制文件的状态)
git checkout base
git checkout master -- file.ext
git add file.ext
git commit
master
↓
* ---- X ---- A ---- B
C
↑
base
现在您可以合并A
并按照需要生成冲突:
git merge A
解决冲突之后,结果如下:
master
↓
* ---- X ---- A ---- B
C ---- M
↑
base
此时,您拥有该文件所需的状态。 你现在有三个选择:
base
合并master
以保留我们人为创建的整个历史。 对于文件冲突(您将在此收到),您可以使用theirs
策略来保持解决方案的状态。 master
文件,并在B
之后对合并的内容进行新的提交。 master
重置为M
(扔掉B
),并使用这个新创建的历史记录继续。 当然,这会删除提交B
因此它基本上删除了历史(如rebase),如果您已经发布了B
则应该避免这种情况。 既然你只是想合并一个文件,你可能更好的是创建每个状态的副本,并手动合并(或与一些合并工具)。
如果你做了两次提交,git没有提出任何抱怨,那就意味着你没有任何冲突。
我建议你
add
/ rm
它们 这样你最终会得到一个包含你希望包含的更改的提交。
在命令中,它会是这样的
$ git checkout sha-commit-2 # or branch name, depends on how your tree looks
$ git reset HEAD^ # soft reset, remove commit but keep changes
$ git diff # diff against previous commit (should be the first one you mention)
--make your changes and add them--
$ git commit --amend
如果你只做了提交,而你没有推进你的更改,你可以恢复你已经完成的提交,在这里:
如何撤消Git中的最后一次提交?
你会发现如何撤消你最后一次提交:
$ git commit -m "Something terribly misguided"
$ git reset --soft HEAD~
<< edit files as necessary >>
$ git add ...
$ git commit -c ORIG_HEAD
另一个类似的信息与其他设施如何在git中提交提交?
如果git的使用对你来说很复杂,另一种方法是:将自己置于编辑文件的分支中,将编辑后的文件复制并保存到另一个文件夹中,例如。 “/ home / your_file_here”,然后将您的分支更改为主,并将编辑的文件“/ home / your_file_here”移至主。 然后您将更新文件,并且可以使用“git diff your_edited_file”来检查更改。
更新你的文件后,你可以删除你修改文件的分支“git branch -d branch_to_be_removed”。 附加信息在这里:如何删除本地和远程的Git分支?
所以我的建议是,不要合并你有的两个提交,你应该撤销其中的一个,在这种情况下,你是在主人做的。 如果你想了解更多关于'合并'的信息,你会在这里找到真正有趣的信息:Git-Branching-Basic-Branching-and-Merging和here:Git-Tools-Advanced-Merging
链接地址: http://www.djcxy.com/p/23461.html