GitHub по ошибке удалил файл - несколько веток фиксируются в разное время.Как справиться? - PullRequest
0 голосов
/ 09 июля 2019

Сценарий ниже подробно описывает, где был удаленный файл в удаленном репозитории Git по ошибке.Если вы прокрутите коммиты ниже, проблема действительно возникла в COMMIT 4 и на самом деле с точки зрения того, было ли это неожиданным / ожидаемым, мне интересно, есть ли общий способ исправить это.Очевидно, что лучше избегать нежелательных файлов в ветке вообще, но когда возникает ситуация, подобная COMMIT 4, но мой вопрос: что делать?

COMMIT 1 (18 days ago): created on local repo file <code1.java> on branch [code1]
                        and pushed to remote branch [code1] for initial commit 
                        of the file

COMMIT 2 (14 days ago): changed a variable in the file <code1.java> on branch [code1] 
                        and pushed to remote branch and created PR 

COMMIT 3: (7 days ago): created on local repo the file <code2.java> on branch [code2]
                        and pushed to remote branch [code2] for initial commit 

COMMIT 4: (6 days ago): **noticed that on [code2] branch I somehow had checked in 
                        <code1.java> with commit 3** so I deleted the file <code1.java> 
                        from branch [code2] and pushed to remote branch [code2] 
                        and did a PR for [code2]

COMMIT 5: (5 days ago): changed formatting on file <code2.java> on branch [code2] 

COMMIT 6: (4 days ago): PR reviewer accepted changes to <code1.java>
                        and merged branch [code1] to master 

COMMIT 7: (3 days ago): PR reviewer accepted changes to <code2.java>
                        and merged branch [code2] to master 

code1.java больше не существует :( :(: (

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Похоже, вы основали свою ветку code2 на code1 вместо master. Когда вы это сделали, вы включили весь код, который был в этой ветке на тот момент, включая code1.java.

Когда вы слились code2, Git рассмотрел только три точки для слияния: основа слияния (коммит 2) и две головы. Поскольку файл не изменился с одной стороны (фиксация 6), а с другой стороны произошла модификация (удаление), Git применил модификацию и удалил файл.

В этом случае было нормально, что code2 содержал code1.java, потому что он был основан на ветке, в которой он содержался: это не было посторонним изменением, которое вы включили. Удалив его, вы фактически внесли постороннее изменение - удаление, которое было противоположным тому, что вы намеревались.

Самым простым способом избежать этого всегда является ветвление master при работе над проектом, что означает, что вам не придется удалять посторонние вещи. Если вы случайно основали другую ветку, вы можете сделать git rebase --onto master code1, которая возьмет вашу ветку из code1 и вместо этого поместит ее в master. Затем вы можете проверить его, чтобы увидеть, нужно ли вам добавлять или удалять вещи в будущем.

1 голос
/ 09 июля 2019

Вы можете получить его с помощью

git checkout <commit4-SHA1>^ -- path/to/code1.java

(помните, что carret (^) означает «родитель этого коммита»)

Затемобнаружен как новый файл git status.Просто добавьте и зафиксируйте его.

Если бы удаление было единственным изменением в указанном COMMIT 4, вы могли бы альтернативно отменить коммит с помощью git revert <commit4-SHA1>

...