В вопросе может быть неоднозначным, что подразумевается под «последним».
, например git log --graph
выводит следующее (упрощенное):
* commit H0
|
* merge
|\
| * commit B0
| |
| * commit B1
| |
* | commit H1
| |
* | commit H2
|/
|
. Затем последние фиксируются по времени: H0, merge, B0.
Проблема заключается в том, что H0 содержит H1 и H2 (и, как правило, больше коммитов перед слиянием и после ветвления), а B0 - нет. Таким образом, вам нужно управлять изменениями от H0, merge, H1, H2, B0 по крайней мере.
Можно использовать rebase, но по-другому, а затем в других упомянутых ответах:
rebase -i HEAD~2
Это покажет вам варианты выбора (как упоминалось в других ответах):
pick B1
pick B0
pick H0
Поместите сквош вместо выбора в H0:
pick B1
pick B0
s H0
После сохранения и выключения rebase будет применяться фиксация по очереди после H1. Это означает, что он попросит вас снова разрешить конфликты (где HEAD будет сначала H1, а затем накапливает фиксации по мере их применения).
После того, как rebase завершится, вы можете выбрать сообщение для раздавленных H0 и B0:
* commit squashed H0 and B0
|
* commit B1
|
* commit H1
|
* commit H2
|
PS Если вы просто выполните сброс в BO: (например, используя reset --mixed
, который более подробно объясняется здесь https://stackoverflow.com/a/18690845/2405850 ):
git reset --mixed hash_of_commit_B0
git add .
git commit -m 'some commit message'
, тогда вы раздавите в B0 изменения H0, H1, H2 (потеря полностью фиксирует изменения после разветвления и перед слиянием.
Вы должны сделать это с помощью коррелированного подзапроса
UPDATE tbl1 t1
SET t1.b = (SELECT c
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
WHERE t1.a = 'foo'
AND EXISTS( SELECT 1
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
. Проблема с написанным вами UPDATE
заключается в том, что Oracle не может гарантировать, что существует ровно 1 tbl2.c
значение что соответствует одному значению tbl1.b
. Если в tbl2
для каждой конкретной строки в tbl1
имеется несколько строк, коррелированное обновление будет вызывать ошибку, указывающую на то, что подстрочный ряд с одной строкой возвратил несколько строк. В этом случае вам нужно добавить некоторую логику в подзапрос, чтобы указать, какую строку из tbl2
использовать в этом случае.
Кажется, что ваше представление не является сохранением ключа в соответствии с ( http://www.orafaq.com/tuningguide/updateable%20view.html ). Действительно, вы делаете свое соединение не на первичный ключ, который, кажется, не разрешен.
Этот оператор терпит неудачу с ошибкой (ORA-01779 не может изменить столбец, который сопоставляется с таблицей, не сохраненной ключом), поскольку он пытается изменить базовую таблицу tbl1table, а таблица tbl1 не сохраняет ключ в представлении. потому что хотя (ID, A) является ключом таблицы dept, это не является ключом соединения.