Просто комментарий:
git revert aCommit
действительно возвращается весь фиксация (как в" все файлы часть фиксации"):
это вычисляет обратный патч, применяет его на ГОЛОВУ и фиксацию.
Так две проблемы здесь (первый легко решен):
-no-commit
опция: "git revert --no-commit aCommit
": это полезно при возвращении эффекта больше чем одной фиксации к индексу подряд. git-checkout
, конкретно git checkout
синтаксис (который не является точно, в чем Вы нуждаетесь в этом случае, хотя) Легкий Мерзавец (Elijah Newren) пытался принести, больше "завершенное возвращается" к Список рассылки Мерзавца ; но без большого успеха:
Люди иногда хотят "вернуться изменения".
Теперь, это может быть:
- изменения между 32 и 29 изменений назад,
- это могли бы быть все изменения начиная с последней фиксации,
- это могли быть изменения с тех пор 3 фиксации назад, или
- это могла быть всего одна определенная фиксация.
- пользователь может хотеть к подмножеству такие возвращения только к определенным файлам ,
(eg revert
, зарегистрированы здесь , но я не уверен, что это - часть текущего распределения, например, хотя)
, но все это сводится к "возвращающимся изменениям" в конце.
eg revert --since HEAD~3 # Undo all changes since HEAD~3
eg revert --in HEAD~8 # much like git revert HEAD~8, but nocommit by default
eg revert --since HEAD foo.py # Undo changes to foo.py since last commit
eg revert foo.py # Same as above
eg revert --in trial~7 bar.c baz. # Undo changes made in trial~7 to bar.[ch]
эти виды "возвращающихся данных", действительно столь отличающихся, что должны должны быть быть различные команды, или что некоторые из этих операций не должны поддерживаться простым, возвращаются команда?
Несомненно, большинство пользователей большую часть времени будет, вероятно, использовать"eg revert FILE1 FILE2...
" форма, но я не видел вреда в поддержке дополнительных возможностей.Также... там что-либо фундаментальное, которое помешало бы базовому мерзавцу принимать такое поведение?
Примечание Elijah
: фиксации по умолчанию не имеют смысла для обобщенного
revert
, команда, и"git revert REVISION
" была бы ошибка с инструкциями (говорящий пользователю добавить - во флаге).
Позволяет, говорят, что Вы имеете из 50 фиксировавших, 20 файлов, Вы понимаете, что старая фиксация X представленных изменений, которые не должны были происходить.
Немного инфраструктуры в порядке.
то, В чем Вы нуждаетесь, является способом перечислить все определенные файлы, в которых Вы нуждаетесь к [1 173], возвращаются
(как в [1 174], "для отмены изменений, внесенных в фиксации X при хранении всех последующих изменений" ),
и затем, для каждого из них:
git-merge-file -p a.py X X^
проблема здесь должна восстановить потерянную функцию, не стирая все последующие изменения в a.py, который Вы могли бы хотеть сохранить.
, Что технику когда-то называют "отрицательным слиянием".
С тех пор git merge-file
средства :
включает все изменения, которые ведут от
к [1 114] в [1 115], Вы можете восстановление удаленная функция путем высказывания, что Вы хотите включить все изменения.)
Примечание: ' -p
' аргумент, который позволяет Вам рассматривать сначала изменения, ничего не делая на текущем файле. Когда Вы уверены, удаляете ту опцию.
Примечание : git merge-file
не что прост : Вы не можете сослаться на предыдущие версии файла точно так же, как это.
(у Вас было бы много раз расстраивающее сообщение: error: Could not stat X
)
Вы имеете к:
git cat-file blob a.py > tmp/ori # current file before any modification
git cat-file blob HEAD~2:a.py > tmp/X # file with the function deleted
git cat-file blob HEAD~3:a.py > tmp/F # file with the function which was still there
git merge-file a.py tmp/X tmp/F # basically a RCS-style merge
# note the inversed commit order: X as based, then F
# that is why is is a "negative merge"
diff -u a.py tmp/ori # eyeball the merge result
git add a.py
git commit -m "function restored" # and any other changes made from X are preserved!
, Если это должно быть сделано для большого количества файлов в предыдущей фиксации..., некоторые сценарии в порядке;)
Я предполагаю, что вам нужен Словарь для каждого столбца, отображающего строку, в значение:
var dt = new DataTable();
var columns = dt.Columns.Cast<DataColumn>();
dt.AsEnumerable().Select(dataRow => columns.Select(column =>
new { Column = column.ColumnName, Value = dataRow[column] })
.ToDictionary(data => data.Column, data => data.Value));