Я отправил фиксацию 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.
Есть ли способ вернуться к этому исходному файлу (состояние до моей фиксации) без отмены фиксации?
Мой единственный способ - найти файл из исходной разработки, скопировать и вставить мою ветку функций и сделать для этого новую фиксацию.
@torek Я отредактировал свой вопрос, я хотел бы услышать ваш ответ
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
если я сквошу три коммита в один коммит (если этот файл тот же), никто не увидит никаких изменений в истории относительно того, что этот файл был изменен. Потому что он снова сделает снимок.
И я так понял, что это было то, что вы хотели. Но если нет, то не делайте этого. Я имею в виду, поскольку вы говорите, что знаете, как делать именно то, что, как вы утверждали, хотите сделать, трудно понять, в чем вопрос, если нет какой-то Другие вещи, которую вы также хотите сделать, поэтому я пытался угадать, что это может быть. быть.
Добавлен пример кода, с которым вы можете работать.
вы поняли мою точку зрения, спасибо.. Я сделал запрос на извлечение и после запроса на изменение от моего коллеги специально для этого файла.. Я скопирую и вставлю этот файл и сделаю новый коммит. все фиксации и слияние-перебазирование в ветку dev
Да, и простое нажатие нового коммита автоматически добавит его в конец запроса на включение, что вам и нужно. — Обратите внимание, что ничего из этого (запроса на включение) не было в вопрос, который вы задали. Чтобы получить более качественную помощь, задавайте более качественные вопросы. Я оставлю здесь информацию о сквоше, потому что она может пригодиться другим; но вы должны нет переписать историю в ветке, которая была отправлена как пул реквест.
Если вам не нужны ответы на команды Git, не используйте тег мерзавец. (Я вырезал это для вас.)