2016-10-25 4 views
-1

Маленькая команда. Коллега по ошибке нажал на origin:master. Он сбросил свое местное репо, но не может push -f в Github, потому что репо защищено.Github: возврат к предыдущему фиксации

У меня есть fetch отредактировал репо, но не объединил его странствующее совершение в моем местном master ... еще.

Как я могу предположить, могу ли я сделать push -f по происхождению, сбросить origin на Github так, чтобы он отражал состояние, в котором он находился до его ошибки?

$ git push origin 2860a4c:master 
To github.com:example/myproj.git 
! [rejected]  2860a4c -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:example/myproj.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again. 

мне действительно нужно интегрировать делать плохой фиксации (с git pull), прежде чем я тогда, я полагаю, reset hard 2860a4c, а затем push -f origin?

Я просто не хочу ухудшать ситуацию.

+2

Возможный дубликат [Как вернуть репозиторий Git к предыдущей фиксации?] (Http://stackoverflow.com/questions/4114095/how-to-revert-git-repository-to-a-previous-commit) –

+0

Я знаю, что здесь много (слишком много?) Сообщений о возврате git-коммитов. Тем не менее, я не нашел тот, который четко объясняет, как удалить (сбросить) последнюю фиксацию на Github. Я предполагаю, что могу «отменить» фиксацию, но я пытаюсь найти способ просто отменить последний Github, если это возможно, без раздувания локальных репозиториев. – Meltemi

+1

Без '-f' вы не можете этого сделать.Вам нужно вернуть эту команду с помощью 'git revert', но это станет частью вашей истории. –

ответ

5

Ниже приведены шаги, которые вы можете предпринять, если у вас есть . У вас есть разрешение на использование git push -f.

На вашей машине, сделайте следующее:

# Step 1: Take the changes from remote 
git pull 

# Step 2: Note the commit to which you want for restoring your repo to 
# using `git log`. Say the commit id is "x". 
git log 

# Step 3: Do hard reset for that commit. 
#   ** NOTE ** All the changes after the commit "x" will be removed 
git reset --hard x # where x is the commit id 

# Step 4: Push to remote 
git push -f 

Затем на машине коллеги, сделайте step 1 к step 3, а затем сделать git pull слить удаленное изменение


В случае вы не имеете разрешения для git push -f, do:

git pull 

git revert <commit id> # may get it via "git log" 

git push 

С git revert изменения с отмененной фиксации будут удалены, но это фиксация останется в истории фиксации.

1

Если вы можете push -f, чем это сделать. Если состояние вы хотите один совершить до вершины, вы можете запустить

git pull 
git reset --hard @~1 
git push -f 

Убедитесь, что все остальные в команде синхронно, так что они не теряют какой-либо работы.

1

Вам не нужно тянуть плохую фиксацию, поэтому git reset не нужен. Если я правильно понял вопрос git push --force должно быть достаточно. Это приведет к тому, что ваше состояние будет удалено.

В случае, если вы уже потянули плохой фиксатор, используйте git reset --hard + git push --force как здесь: https://stackoverflow.com/a/37145089/1663197.

+0

> Как я могу предположить, что могу нажать -f в исходное положение – AleXoundOS

Смежные вопросы