簡體   English   中英

當解決方案是刪除沖突的文件時,有沒有辦法使git rerere工作?

[英]Is there a way to make git rerere work when the resolution is to delete the conflicted file?

這是交易。 母版有一個文件file1。 我分支,然后在分支中刪除該文件。 同時,我在master上修改file1。 繁榮,沖突。

當我將分支合並到master時,解決方案是刪除文件。 我正在嘗試使用git rerere來多次執行相同的解析,但是正如您在下面看到的那樣,當您刪除文件時,它沒有記錄解析度。

我找不到關於此的任何文檔,這僅僅是rerere的限制嗎?

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → touch file1.txt

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✗| → git add . && git commit -m 'File1'
[master (root-commit) 95a807e] File1
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → git checkout -b delete_file_1
Switched to a new branch 'delete_file_1'

 |system| brad-macbook-air in ~/tmp
± bb+ih |delete_file_1 ✓| → git rm file1.txt
rm 'file1.txt'

 |system| brad-macbook-air in ~/tmp
± bb+ih |delete_file_1 ✗| → git commit -m 'rm file1'
[delete_file_1 83d1a57] rm file1
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 file1.txt

 |system| brad-macbook-air in ~/tmp
± bb+ih |delete_file_1 ✓| → git checkout master
Switched to branch 'master'

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → echo 'hello' > file1.txt

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✗| → git commit -am 'update file1'
[master 16f6541] update file1
 1 file changed, 1 insertion(+)

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → git merge delete_file_1 
CONFLICT (modify/delete): file1.txt deleted in delete_file_1 and modified in HEAD. Version HEAD of file1.txt left in tree.
Automatic merge failed; fix conflicts and then commit the result.

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✗| → git rm file1.txt
file1.txt: needs merge
rm 'file1.txt'

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✗| → git commit --no-edit
[master 4791204] Merge branch 'delete_file_1'

在這里,我們應該看到類似“ file1.txt的已記錄分辨率”的信息,但事實並非如此。 為了確保它沒有記錄我們的分辨率,我們繼續進行並再次進行完全相同的合並:

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → git reset head^
Unstaged changes after reset:
D   file1.txt

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✗| → git co .

 |system| brad-macbook-air in ~/tmp
± bb+ih |master ✓| → git merge delete_file_1 
CONFLICT (modify/delete): file1.txt deleted in delete_file_1 and modified in HEAD. Version HEAD of file1.txt left in tree.
Automatic merge failed; fix conflicts and then commit the result.

在這里您可以看到git rerere不記得解決沖突的方法(實際上是錯誤地將文件留在樹中)。

按照目前的狀態,re.rerere嘗試根據每個沖突文件中的塊記錄以前的分辨率。 在刪除的情況下,rerere僅將其視為無法解決的難題。

當功能分支包含主分支中不存在的新文件時,我也遇到了問題,但是為了使功能分支合並到母版中並使其正常工作,需要對該新文件進行一些小的修改。 git rerere沒有意識到這是整個合並過程的一部分,因此從不記錄所需的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM