Отмените слияние Git, которое еще не было перенесено

Адаптировано из ответа @ karlo, чтобы сделать вещи еще более чистыми:

def set_axes_radius(ax, origin, radius):
    ax.set_xlim3d([origin[0] - radius, origin[0] + radius])
    ax.set_ylim3d([origin[1] - radius, origin[1] + radius])
    ax.set_zlim3d([origin[2] - radius, origin[2] + radius])

def set_axes_equal(ax):
    '''Make axes of 3D plot have equal scale so that spheres appear as spheres,
    cubes as cubes, etc..  This is one possible solution to Matplotlib's
    ax.set_aspect('equal') and ax.axis('equal') not working for 3D.

    Input
      ax: a matplotlib axis, e.g., as output from plt.gca().
    '''

    limits = np.array([
        ax.get_xlim3d(),
        ax.get_ylim3d(),
        ax.get_zlim3d(),
    ])

    origin = np.mean(limits, axis=1)
    radius = 0.5 * np.max(np.abs(limits[:, 1] - limits[:, 0]))
    set_axes_radius(ax, origin, radius)

Использование:

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect('equal')         # important!

# ...draw here...

set_axes_equal(ax)             # important!
plt.show()
3556
задан emii 28 October 2016 в 16:44
поделиться

8 ответов

С помощью git reflog проверьте, какой коммит предшествует слиянию (git reflog будет лучшим вариантом, чем git log). Затем вы можете сбросить его, используя:

git reset --hard commit_sha

Есть и другой способ:

git reset --hard HEAD~1

Это вернёт вам 1 коммит.

Имейте в виду, что все изменённые и незафиксированные/неудалённые файлы будут сброшены в их неизменённое состояние. Чтобы сохранить их, либо спрячьте изменения подальше, либо смотрите опцию --merge ниже.


Как предложил @Velmont ниже в своем ответе, в этом прямом случае использование:

git reset --hard ORIG_HEAD

может дать лучшие результаты, так как сохранит ваши изменения. ORIG_HEAD будет указывать на коммит непосредственно перед слиянием, так что вам не придётся искать его самостоятельно.


Ещё один совет - использовать переключатель --merge вместо --hard, поскольку он не сбрасывает файлы без необходимости:

git reset --merge ORIG_HEAD

--merge

Сбрасывает индекс и обновляет файлы в рабочем дереве, которые отличаются между и HEAD, но сохраняет те, которые отличаются между индексом и рабочим деревом (т.е. имеющие изменения, которые не были добавлены).

4181
ответ дан 17 December 2019 в 16:00
поделиться

Это может быть сделано несколько путей.

1) Слияние Аварийного прекращения работы

, Если Вы являетесь промежуточными плохое слияние (по ошибке сделанный с неправильным ответвлением), и требуемый для предотвращения слияния для возвращения к последнему ответвлению как указано ниже:

git merge --abort

2) ГОЛОВА Сброса к удаленному ответвлению

, Если Вы работаете от удаленного, разрабатывает ответвление, можно сбросить ГОЛОВУ к последней фиксации на удаленном ответвлении как указано ниже:

git reset --hard origin/develop

3) Удаляют текущее ответвление и контроль снова из удаленного репозитория

Рассмотрение, Вы продолжаете работать, разрабатывают ответвление в локальном repo, который синхронизирует с удаленным/разработанным ответвлением, можно сделать как указано ниже:

git checkout master 
##to delete one branch, you need to be on another branch, otherwise you will fall with the branch :) 

git branch -D develop
git checkout -b develop origin/develop
5
ответ дан 17 December 2019 в 16:00
поделиться

необходимо изменить ГОЛОВУ, Не Вашу, конечно, но ГОЛОВУ мерзавца....

Поэтому перед ответом позволяют нам добавить некоторый фон, объясняя, что это HEAD.

First of all what is HEAD?

HEAD просто ссылка на текущую фиксацию (последнюю) на текущем ответвлении.
может только быть сингл HEAD в любой момент времени. (исключая git worktree)

содержание [1 110] хранится в .git/HEAD, и оно содержит 40-байтовый SHA-1 текущей фиксации.

<час>

detached HEAD

, Если Вы не находитесь на последней фиксации - подразумевать, которое HEAD указывает на предшествующую фиксацию в истории его названный detached HEAD .

enter image description here

На командной строке, это будет похоже на это - SHA-1 вместо имени ответвления начиная с эти HEAD не указывает на подсказку текущего ответвления

enter image description here

enter image description here

Несколько опций о том, как восстановиться от отдельного ГЛАВЫ:

<час>

git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

Этот будет контроль новое ответвление, указывающее на желаемую фиксацию.
Эта команда будет контроль к данной фиксации.
На данном этапе можно создать ответвление и начать работать с этого момента.

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>
<час>

git reflog

можно всегда использовать reflog также.
git reflog отобразит любое изменение, которое обновило HEAD, и проверка желаемого повторно порют запись, установит HEAD назад к этой фиксации.

Каждый раз, когда ГОЛОВА изменяется, будет новой записью в reflog

git reflog
git checkout HEAD@{...}

, Это вернется, Вы к Вашей желаемой фиксации

enter image description here

<час>

git reset --hard <commit_id>

"Кладете обратно" Голову к желаемой фиксации.

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
<час>

git revert <sha-1>

"Отменяют" данную фиксацию или фиксируют диапазон.
команда сброса "отменит" любые изменения, внесенные в данной фиксации.
А новая фиксация с патчем отмены будет фиксироваться, в то время как исходная фиксация останется в истории также.

# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
<час>

Эта схема иллюстрирует, который команда делает что.
, Как Вы видите там reset && checkout, изменяют HEAD.

enter image description here

8
ответ дан 17 December 2019 в 16:00
поделиться

Я думаю, вы можете сделать git rebase -i [hash] [branch_name], где [hash] - это идентификационный хэш для того, насколько далеко назад вы хотите отмотать плюс один (или на сколько коммитов назад вы хотите вернуться), а затем удалить строки для коммитов в редакторе, которые вам больше не нужны. Сохраните файл. Выйдите. Молитесь. И все должно быть перемотано. Возможно, вам придется сделать git reset --hard, но на данный момент все должно быть хорошо. Вы также можете использовать это, чтобы вытащить определённые коммиты из стека, если вы не хотите сохранять их в истории, но это может привести ваш репозиторий в состояние, которое вам, вероятно, не нужно.

1
ответ дан 17 December 2019 в 16:00
поделиться

Хорошо, другие люди здесь дали мне близкие ответы, но это не сработало. Вот что я сделал.

Выполнение этого ...

git reset --hard HEAD^
git status

... дало мне следующий статус.

# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.

Затем мне пришлось ввести ту же команду git reset еще несколько раз. Каждый раз, когда я это делал, сообщение менялось на единицу, как вы можете видеть ниже.

> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.

В этот момент я увидел, что сообщение о состоянии изменилось, поэтому я попытался выполнить git pull , и это, похоже, сработало:

> git pull
Updating 2df6af4..12bbd2f
Fast forward
 app/views/truncated |    9 ++++++---
 app/views/truncated |   13 +++++++++++++
 app/views/truncated |    2 +-
 3 files changed, 20 insertions(+), 4 deletions(-)
> git status
# On branch master

Короче говоря, мои команды сводились к следующему:

git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git pull
36
ответ дан 17 December 2019 в 16:00
поделиться

Вы должны сброситься на предыдущий коммит. Это должно сработать:

git reset --hard HEAD^

Или даже HEAD^^ для возврата к предыдущему коммиту. Вы всегда можете дать полную ссылку на SHA, если вы не уверены, сколько шагов назад вам следует сделать.

В случае, если у вас возникли проблемы, а в вашей мастер-ветке не было локальных изменений, вы можете вернуться к origin/master.

129
ответ дан 17 December 2019 в 16:00
поделиться

Просто создайте новое ответвление, тогда избирательно подойдите к выбору желаемый, соглашается на него.

Его средство сохранения и более простой тогда сбрасывает описанный во многих ответах выше

0
ответ дан 17 December 2019 в 16:00
поделиться

Вы можете использовать команду git-reset.

git-reset - сбросить текущий HEAD в

указанное состояние. git reset [--mixed |

--soft | --hard | --merge] [-q] [] git reset [-q] []

[--] ... git reset --patch

[] [--] [...]

GIT-Reset

-13
ответ дан 17 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: