Адаптировано из ответа @ 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()
С помощью 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, но сохраняет те, которые отличаются между индексом и рабочим деревом (т.е. имеющие изменения, которые не были добавлены).
Это может быть сделано несколько путей.
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
необходимо изменить ГОЛОВУ, Не Вашу, конечно, но ГОЛОВУ мерзавца....
Поэтому перед ответом позволяют нам добавить некоторый фон, объясняя, что это HEAD
.
First of all what is HEAD?
HEAD
просто ссылка на текущую фиксацию (последнюю) на текущем ответвлении.
может только быть сингл HEAD
в любой момент времени. (исключая git worktree
)
содержание [1 110] хранится в .git/HEAD
, и оно содержит 40-байтовый SHA-1 текущей фиксации.
detached HEAD
, Если Вы не находитесь на последней фиксации - подразумевать, которое HEAD
указывает на предшествующую фиксацию в истории его названный detached HEAD
.
На командной строке, это будет похоже на это - SHA-1 вместо имени ответвления начиная с эти HEAD
не указывает на подсказку текущего ответвления
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@{...}
, Это вернется, Вы к Вашей желаемой фиксации
<час>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 rebase --no-autostash
также. 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
.
Я думаю, вы можете сделать git rebase -i [hash] [branch_name]
, где [hash]
- это идентификационный хэш для того, насколько далеко назад вы хотите отмотать плюс один (или на сколько коммитов назад вы хотите вернуться), а затем удалить строки для коммитов в редакторе, которые вам больше не нужны. Сохраните файл. Выйдите. Молитесь. И все должно быть перемотано. Возможно, вам придется сделать git reset --hard
, но на данный момент все должно быть хорошо. Вы также можете использовать это, чтобы вытащить определённые коммиты из стека, если вы не хотите сохранять их в истории, но это может привести ваш репозиторий в состояние, которое вам, вероятно, не нужно.
Хорошо, другие люди здесь дали мне близкие ответы, но это не сработало. Вот что я сделал.
Выполнение этого ...
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
Вы должны сброситься на предыдущий коммит. Это должно сработать:
git reset --hard HEAD^
Или даже HEAD^^
для возврата к предыдущему коммиту. Вы всегда можете дать полную ссылку на SHA, если вы не уверены, сколько шагов назад вам следует сделать.
В случае, если у вас возникли проблемы, а в вашей мастер-ветке не было локальных изменений, вы можете вернуться к origin/master
.
Просто создайте новое ответвление, тогда избирательно подойдите к выбору желаемый, соглашается на него.
Его средство сохранения и более простой тогда сбрасывает описанный во многих ответах выше
Вы можете использовать команду git-reset.
git-reset - сбросить текущий HEAD в
указанное состояние. git reset [--mixed |
--soft | --hard | --merge] [-q] [] git reset [-q] []
[--] ... git reset --patch
[] [--] [...]