Если мы оба начинаем работать над origin/feature1
, и вы сначала нажимаете несколько коммитов, а затем я пытаюсь выдвинуть различные коммиты, Git выдаст мне ошибку, похожую на
! [rejected] feature1 -> origin/feature1 (non-fast-forward)
error: failed to push some refs to 'https://your-repo.com'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Чтобы правильно обработать этоВ этой ситуации я мог бы запустить git fetch origin
, чтобы вставить ваши коммиты в мой локальный git, а затем включить ваши изменения в мои собственные либо с помощью merge
или rebase
.
Как это звучит, произошло вВаша ситуация (как и другие сформулировали) заключается в том, что ваш коллега вместо этого выполнил git push --force
, который велел git игнорировать ошибку, которую он выдал в первый раз, и просто переписал origin/feature1
моей веткой feature1
.
Чтобы избежать этих проблем в будущем, я бы предложил:
- В первую очередь работать над своими собственными ветками функций, а не делиться ими между разработчиками
- Использовать только
-f
или --force
отметки, если вы знаете точно что вы делаете.И убедитесь, что сообщение передается другим членам вашей команды.Можно отключить принудительное нажатие на ветви в GitHub.
Чтобы вернуть изменения, вы можете запустить git reflog
, найти записи "commit", чтобы найти последний сделанный вами коммиттема, а затем checkout
соответствующий хеш коммита.Ваш локальный Git хранит каждый коммит, который вы делаете, по крайней мере 30 дней, его невозможно потерять, если вы не удалите каталог .git
.