我有以下提交
dd9e52bafac5fa427ed64c5d9cf08015fa804ed4 Added Line 3
a000427a4c70781d0bed7b31f56f290ac1d636b7 Added Line 2
20baa578ae205768639620749f53bd318e329e73 Added Line 1
7c043a104394ba4ba5a2fb29d4526de50b7d12be Created file.txt
在commit dd9e,file.txt现在读取
Line 1
Line 2
Line 3
Head和master指向最后一次提交(dd9e)。
git revert 20baa
我被告知
error: could not revert 20baa57... Added Line 1
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
我不明白为什么会发生冲突。
我想撤消在commit 20baa中完成的更改(即从文件中删除第1行)。我意识到我可以手动执行此操作然后提交更改,但我认为git revert是为了撤消更改?
我是否误解了git revert的作用?
答案 0 :(得分:1)
import copy
dcts = []
buffer = {}
for i in list_of_dict:
if not i or any(j in buffer for j in i.keys()):
buffer = i
else:
new_ = copy.deepcopy(i)
new_.update(buffer)
buffer = copy.deepcopy(new_)
dcts.append(buffer)
print dcts
创建一个新的提交,它执行提交的反向。在上述情况下,它尝试应用git revert <commit>
生成的补丁。
如果无法反过来干净地应用更改,则会发生冲突。您可以解决冲突(修复,添加,提交),也可以中止恢复并手动执行更改。
根据冲突的类型,您可能会更好地提供不同的merge strategy(git diff -R 20baa57^..20baa57
)或策略选项(--strategy
)。
有关详细信息,请参阅man git-revert
。
答案 1 :(得分:1)
git revert
查看原始提交中所做的更改,生成具有相反更改的差异,并尝试应用它。在你的情况下,Git正试图应用这个差异:
-Line 1
<nothing else in the file>
当尝试将更改应用于来自任何差异的行时,如果该行或其两条相邻行从那时起已发生更改,则Git将引发冲突。这是启发式Git用于猜测同一文件中的更改是否足以让您烦恼。使用此启发式,上面的diff与文件的最新状态冲突,即:
Line 1
Line 2
Line 3
它拒绝删除第1行,因为下一行曾经没有任何内容,但现在它是第2行.Git认为可能会影响第1行的含义。它不会让你删除第1行而不确认第2行的后续添加并没有使第1行更重要,毕竟值得保留。