Как вернуть определенный файл в коммит на GitHub Desktop

Я отправил фиксацию X в свою ветку функций.

Когда я проверяю историю через Github Desktop, я понимаю, что только один файл не должен быть в этом коммите: История выглядит так, как показано ниже:

X commit
A file changed-- ok
B file changed-- ok
C file changed-- not ok for me.. I had changed this by mistake.

Есть ли способ вернуться к этому исходному файлу (состояние до моей фиксации) без отмены фиксации?

Мой единственный способ - найти файл из исходной разработки, скопировать и вставить мою ветку функций и сделать для этого новую фиксацию.

Если вам не нужны ответы на команды Git, не используйте тег мерзавец. (Я вырезал это для вас.)

torek 09.04.2022 15:27

@torek Я отредактировал свой вопрос, я хотел бы услышать ваш ответ

roadRunner 09.04.2022 15:38
ответ Мэтта (все равно уже принятый) хорош...
torek 10.04.2022 00:12
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Is there any way to go back to this original file (the state before my commit) without reverting the commit?

Безусловно. Состояние файла перед этой фиксацией находится в предыдущей фиксации. (Все коммиты — это снимки всех файлов.)

Однако вы не можете изменить коммит, который вы сделали. Коммиты неизменяемы; В противном случае Git был бы довольно бесполезен.

My only way is to find the file from the origin-develop and copy and paste my feature branch and make a new commit for this.

Да и...? Так что сделай это.

Если вы возражаете против того, что у вас есть два коммита, а вы бы предпочли иметь один, то сожмите их вместе после совершения второго коммита; интерактивная переустановка — это простой способ сделать это, хотя лично в этой ситуации я бы использовал программный сброс, как описано в моем В чем разница между git reset --mixed, --soft и --hard? (это тип сожаления 1). Но сделайте это нет, если вы уже отправили эту ветку с предыдущей фиксацией в общее расположение (например, запросом на включение). Вы не должны переписывать публичную историю.


Пример. Начнем с этой ситуации (это журнал, поэтому коммиты выполняются от самых новых до самых старых):

* 78f90c1 edited all three files
* 5ec87ed created three files

Мы отредактировали три файла; назовите их aaa.txt, bbb.txt и ccc.txt. Мы сожалеем об редактировании файла ccc.txt и хотим восстановить его, и только его, до состояния, в котором он был в версии 5ec87ed.

git restore -s @~1 -- ccc.txt
git add .
git commit -m 'restored ccc.txt'

Готово. Теперь у нас есть это:

* 75c192b (HEAD -> what) restored the third file
* 78f90c1 edited all three files
* 5ec87ed created three files

Но если мы предпочитаем иметь только один коммит там, где сейчас их два (помните, не делайте этого, если вы уже отправили первые два коммита):

% git reset --soft @~2
% git commit -m 'edited just two files'

Результат:

* e0a324a (HEAD -> what) edited just two files
* 5ec87ed created three files

если я сквошу три коммита в один коммит (если этот файл тот же), никто не увидит никаких изменений в истории относительно того, что этот файл был изменен. Потому что он снова сделает снимок.

roadRunner 09.04.2022 16:01

И я так понял, что это было то, что вы хотели. Но если нет, то не делайте этого. Я имею в виду, поскольку вы говорите, что знаете, как делать именно то, что, как вы утверждали, хотите сделать, трудно понять, в чем вопрос, если нет какой-то Другие вещи, которую вы также хотите сделать, поэтому я пытался угадать, что это может быть. быть.

matt 09.04.2022 16:05

Добавлен пример кода, с которым вы можете работать.

matt 09.04.2022 16:06

вы поняли мою точку зрения, спасибо.. Я сделал запрос на извлечение и после запроса на изменение от моего коллеги специально для этого файла.. Я скопирую и вставлю этот файл и сделаю новый коммит. все фиксации и слияние-перебазирование в ветку dev

roadRunner 09.04.2022 16:09

Да, и простое нажатие нового коммита автоматически добавит его в конец запроса на включение, что вам и нужно. — Обратите внимание, что ничего из этого (запроса на включение) не было в вопрос, который вы задали. Чтобы получить более качественную помощь, задавайте более качественные вопросы. Я оставлю здесь информацию о сквоше, потому что она может пригодиться другим; но вы должны нет переписать историю в ветке, которая была отправлена ​​как пул реквест.

matt 09.04.2022 16:11

Другие вопросы по теме