Копить только один файл из нескольких файлов, которые были изменены до git 2.13 - PullRequest
2764 голосов
/ 15 июня 2010

Как я могу сохранить только один из нескольких измененных файлов в моей ветке?

Ответы [ 29 ]

2 голосов
/ 14 сентября 2018

Чтобы спрятать один файл, используйте git stash --patch [file].

В ответ на приглашение: Stash this hunk [y,n,q,a,d,j,J,g,/,e,?]? ?.Просто наберите a (спрятать этот кусок и все последующие фрагменты в файле), и все в порядке.

2 голосов
/ 21 июля 2015

При попытке переключения между двумя ветками возникает такая ситуация.

Попробуйте добавить файлы, используя "git add filepath".

Позже выполните эту строку

git stash --keep-index

2 голосов
/ 20 июля 2018
git add .                           //stage all the files
git reset <pathToFileWillBeStashed> //unstage file which will be stashed
git stash                           //stash the file(s)
git reset .                         // unstage all staged files
git stash pop                       // unstash file(s)
1 голос
/ 20 июня 2012

Аналогичная ситуация. Совершил и понял, что это не хорошо.

git commit -a -m "message"
git log -p

На основании ответов это помогло мне.

# revert to previous state, keeping the files changed
git reset HEAD~
#make sure it's ok
git diff
git status
#revert the file we don't want to be within the commit
git checkout specs/nagios/nagios.spec
#make sure it's ok
git status
git diff
#now go ahead with commit
git commit -a -m "same|new message"
#eventually push tu remote
git push
1 голос
/ 21 мая 2019

Вы можете просто сделать это:

git stash push "filename"

или с дополнительным сообщением

git stash push -m "Some message" "filename"
1 голос
/ 30 апреля 2015

Я не знаю, как это сделать в командной строке, только используя SourceTree.Допустим, вы изменили файл A и имеете два блока изменений в файле B. Если вы хотите сохранить только второй блок в файле B и оставить все остальное без изменений, сделайте следующее:

  1. Поместите все
  2. Внесите изменения в рабочую копию, чтобы отменить все изменения в файле A. (например, запустите внешний инструмент сравнения и сопоставьте файлы.)
  3. Сделайте так, чтобы файл B выглядел так, как будто к нему применено только второе изменениеЭто.(например, запустите внешний инструмент сравнения и отмените первое изменение.)
  4. Создайте шкатулку, используя «Сохранить поэтапные изменения».
  5. Отменить все
  6. Готово!
0 голосов
/ 27 февраля 2017

Я не нашел ответа, который мне нужен, и это так просто, как:

git add -A
git reset HEAD fileThatYouWantToStash
git commit -m "committing all but one file"
git stash

Это скрывает ровно один файл.

0 голосов
/ 08 февраля 2017

Одним сложным способом было бы сначала зафиксировать все:

git add -u
git commit // creates commit with sha-1 A

Сброс обратно к исходной фиксации, но извлечение the_one_file из новой фиксации:

git reset --hard HEAD^
git checkout A path/to/the_one_file

Теперь вы можете спрятать the_one_file:

git stash

Очистите, сохранив зафиксированный контент в вашей файловой системе и вернув исходный коммит:

git reset --hard A
git reset --soft HEAD^

Да, немного неловко ...

0 голосов
/ 07 августа 2018

Быстрый ответ


Чтобы вернуть определенный измененный файл в git, вы можете сделать следующую строку:

git checkout <branch-name> -- <file-path>

Вот фактический пример:

git checkout master -- battery_monitoring/msg_passing.py

...