Вернитесь к более раннему commit [duplicate]

Во-первых, он не имеет хорошего, чтобы иметь более одного файла settings.gradle - он смотрит только на верхний уровень.

Когда вы получаете эта ошибка «Конфигурация с именем» по умолчанию «не найдена», это действительно запутанно, но это означает, что Gradle ищет файл (или файл build.gradle) где-то, и он не находит его. В вашем случае это у вас в файле settings.gradle :

include ':libraries:Android-Bootstrap',':Android-Bootstrap'

, который заставляет Gradle искать библиотеку в FTPBackup / libraries / Android-Bootstrap . Если вы используете чувствительную к регистру файловую систему (и вы не ошибались библиотеки в своем вопросе, когда вы имели в виду библиотеки ), он может не найти FTPBackup / Библиотеки / Android-Bootstrap из-за разницы в случае. Он также ищет другую библиотеку в FTPBackup / Android-Bootstrap , и она определенно не найдет ее, потому что этого каталога там нет.

Это должно работать:

include ':Libraries:Android-Bootstrap'

В блоке dependencies вам нужна такая же чувствительная к регистру спецификация:

compile project (':Libraries:Android-Bootstrap')
476
задан Adriaan Koster 11 November 2015 в 12:49
поделиться

9 ответов

Предполагая, что ваша ветка называется master как здесь, так и удаленно, и что ваш пульт называется origin, вы можете сделать:

 git reset --hard <commit-hash>
 git push -f origin master

Однако вам следует избегать этого, если кто-либо еще работает с вашим удаленным репозиторием и вытащил ваши изменения. В этом случае было бы лучше вернуть те коммиты, которые вы не хотите, а затем нажимать как обычно.

Обновление: у вас есть объяснил ниже, что другие люди вытащили те изменения, которые вы нажали, поэтому лучше создать новую фиксацию, которая возвращает все эти изменения. Есть хорошее объяснение ваших вариантов для этого в этом ответе от Jakub Narębski . Какой из них наиболее удобен, зависит от количества фиксаций, которые вы хотите вернуть, и какой метод имеет для вас наибольший смысл.

Поскольку из вашего вопроса ясно, что вы уже использовали git reset --hard для сброса настроек master ], вам может потребоваться начать с git reset --hard ORIG_HEAD, чтобы переместить ветку назад туда, где она была раньше. (Как всегда с git reset --hard, убедитесь, что git status чист, что вы находитесь на правильной ветке и знаете, что вы знаете git reflog как инструмент для восстановления явно потерянных коммитов.) Вы также должны проверить, что ORIG_HEAD указывает на право фиксации с помощью git show ORIG_HEAD.

774
ответ дан Community 22 August 2018 в 15:41
поделиться
  • 1
    Опасность для опасностей: этот сброс предполагает, что соответствующая ветвь ( отслеживание ) в настоящий момент проверена и нет никаких незафиксированных изменений, которые вы хотели сохранить. Используйте git update-ref вместо reset --hard ; это позволит вам сделать то же самое без наличия рабочего дерева / проверенной ветки – sehe 28 April 2011 в 10:59
  • 2
    Понимаю. Он был подтолкнут и изменен другими. Поэтому я должен использовать revert , но, допустим, хочу вернуть последние 4 коммита, чтобы я сделал git revert comit1; git push; git revert comit2; git push; ... или просто git revert commit4; git push? – nacho4d 28 April 2011 в 11:06
  • 3
    @ nacho4d: вам не нужно толкать после каждого возврата - есть хорошее описание того, что делать в этом ответе от Jakub Narębski . Вам нужно отменить все фиксации, идущие назад - просто git revert commit4 создает новую фиксацию, которая отменяет изменения, введенные в commit4. Как ответ, который я связывал с указаниями, вы можете перевести их в одну фиксацию. – Mark Longair 28 April 2011 в 11:34
  • 4
  • 5
    @sehe: это сложно использовать, потому что вам нужно использовать полное имя ссылки, и поэтому людям легко помещать их каталог .git с refs, которые они не собирались создавать. Я был неправ, чтобы сказать, что никаких проверок безопасности нет. Вы можете найти классификацию в "сантехника" и "фарфор" команды на странице git man . – Mark Longair 28 April 2011 в 11:55
  • 6
    @ nacho4d: я обновил свой ответ, и я надеюсь, что пересмотренный ответ и мой комментарий выше ответят на это. – Mark Longair 28 April 2011 в 11:57

Сделайте одно, получите SHA команды. например, 87c9808, а затем,

  1. переместите себя, то есть ваша голова к указанному фиксации (сделав git reset --hard 89cef43 // упомянуть ваш номер здесь)
  2. Затем выполните некоторые изменения в случайном файле, так что git попросит вас совершить это локально, а затем удаленно. Таким образом, вам нужно сделать это сейчас. после применения изменения git commit -a -m "trial commit"
  3. Теперь нажмите следующую фиксацию (если это было сделано локально) с помощью git push origin master
  4. Теперь, что git спросит от вас является то, что ошибка

: не удалось нажать некоторые ссылки на « https://github.com/YOURREPOSITORY/AndroidExperiments.git »: Обновления были отклонены, потому что подсказка вашей текущей ветки отстает от намека: ее удаленная копия. Интеграция удаленных изменений (например, подсказка: «git pull ...») перед повторным нажатием. **

  1. Таким образом, теперь вы можете сделать

git push --force origin master

  1. И, таким образом, я надеюсь, что он работает:)
1
ответ дан Aᴍɪʀ 22 August 2018 в 15:41
поделиться

Мои два цента к предыдущим ответам: если

git push --force <remote> <the-hash>:<the remote branch>

все еще не работает, вы можете отредактировать раздел приема <your-remote-repo>.git/config файла:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false
4
ответ дан badbishop 22 August 2018 в 15:41
поделиться

Изучить раздел: Отменить публичные коммиты с возвратом в блог Atlassian https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

0
ответ дан CodeFarmer 22 August 2018 в 15:41
поделиться

В GitLab вам, возможно, придется отключить свою ветку до этого. Это можно сделать в режиме [репо]> Настройки> Репозиторий> Защищенные ветви. Затем работает метод из ответа Марка.

git reset --hard <commit-hash>
git push -f origin master
1
ответ дан dudasaus 22 August 2018 в 15:41
поделиться

Если ваш филиал не является разработкой или производством, самый простой способ достичь этого - сменить его на определенную фиксацию локально и создать там новую ветку. Вы можете использовать:

git checkout 000000

(где 000000 - идентификатор фиксации, куда вы хотите пойти) в вашей проблемной ветке, а затем просто создать новую ветку:

git remote add [name_of_your_remote]

Затем вы можете создать новый PR, и все будет работать нормально

0
ответ дан Gerardo Suarez 22 August 2018 в 15:41
поделиться

Я решил эту проблему, как ваша, с помощью следующих команд:

git reset --hard <commit-hash> 
git push -f <remote> <local branch>:<remote branch> 
51
ответ дан Ibrohim Ermatov 22 August 2018 в 15:41
поделиться

Если вы хотите использовать предыдущую версию файла, я бы порекомендовал использовать git checkout.

git checkout <commit-hash>

. Это приведет к возврату вас вовремя, это не повлияет на текущее состояние вашего проекта, вы может прийти на mainline git checkout mainline

, но когда вы добавляете файл в аргумент, этот файл возвращается вам из предыдущего времени в текущее время проекта, то есть ваш текущий проект изменяется и ему необходимо

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push

Преимущество этого заключается в том, что он не удаляет историю, а также не отменяет определенные изменения кода (git revert)

Подробнее здесь https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout

4
ответ дан priya khokher 22 August 2018 в 15:41
поделиться

Используйте другие ответы, если вы не против потери локальных изменений. Этот метод может по-прежнему разрушать ваш пульт, если вы выберете неправильный хэш хешей, чтобы вернуться к нему.

Если вы просто хотите, чтобы удаленное совпадение выполнялось с фиксацией, которая уже находится в вашей локальной ветке:

  1. Не выполняйте сброса.
  2. Используйте git log, чтобы найти хеш фиксации, которую хотите, чтобы пульт был включен. git log -p, чтобы увидеть изменения, или git log --graph --all --oneline --decorate, чтобы увидеть компактное дерево. [Имеет этот последний в качестве псевдонима в вашей оболочке очень удобно.)
  3. Скопируйте хэш.
  4. Выполните команду, например:
    git push --force <remote> <the-hash>:<the remote branch>
    
    , например.
    git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
    
60
ответ дан Walf 22 August 2018 в 15:41
поделиться
  • 1
    Граф был очень приятным советом, я просто добавил -5, чтобы получить только последние n коммитов, это было огромное дерево. Также избежать сброса - это то, что я искал. большой – Alexander D 12 December 2017 в 12:11
  • 2
  • 3
    Это потрясающе. Я всегда испортил свой местный. Это было именно то, что мне нужно после того, как я случайно нажал свою сцену, чтобы жить: (Спасибо! – Jake 23 February 2018 в 22:52
Другие вопросы по тегам:

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