2016-10-24 4 views
0

Я немного нуб с Git, и мне было поручено очистить историю особенностей, которые я разработал недавно. У меня есть аналогичная настройка для этого человека here. Я также хочу сделать то же самое, но я хочу, чтобы выкарабкаться до конкретных коммитов. Например, если мои фиксаций являются commit1, commit2, ..., commitN, я хочу сделать так, чтобы commit1, commit2 ... раздавлены в commitX; commitX + 1, commitX + 2, ... сданы до commitY; и т.д.Сквош произвольные коммиты в удаленной ветке

Я понимаю, что это возможно с помощью команды

git rebase -i origin/*branch_name* 

, но проблема в том, что когда я запускаю эту команду, я получаю это:

noop 

# Rebase a112005..a112005 onto a112005 (1 command(s)) 
... 

Насколько я понимаю, здесь должны отображаться последние и первые коммиты, но он видит только последнее коммит. Когда я пытаюсь запустить выбрать или сквош с любым другими совершить это говорит:

error: could not apply *commit hash*... *commit message* 

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

ответ

1

Вы не можете ничего сделать на ветке удаленного слежения. На самом деле, вы не можете быть включенным в ветку удаленного отслеживания. (Команда git checkout - это та, которая ставит вас «на ветку», как показывает git status, но она не будет размещена на ветке удаленного слежения, только на локальной ветке.)

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

Если вы хотите что-то случиться, у кого-то еще «s Git репозиторий (например, один на origin), то, как вы делаете это в первый, получить все настройки в вашего хранилище, а затем использовать git push до спросите их, чтобы взять вашу работу в их репозиторий и установить один из их названия филиалов для соответствия.

Если вы спросите их, другой Git, который контролирует, что другое хранилище установить их branch-name, чтобы указать на некоторые конкретные фиксации, и они согласны, того, в тот момент, ваших Git установит ваш origin/branch-name, чтобы указать на тот же коммит, поскольку их Git сказал вам, что да, теперь он использует эту конкретную фиксацию для этой конкретной ветви.


Они должны иметь , что совершить, но ваш git push даст им это первый, если они этого не делают уже есть. Так работает git push. Во-первых, он передает набор объектов, которые у вас есть, что им не нужно, чтобы они могли принять ваши запросы; затем он передает через серию запросов: «Пожалуйста, установите филиал B1 совершить 1234567 ... и/или филиал B2 совершить 89abcde ... и/или установить тег T к ... ". Их Git не подчиняется никому, некоторым или всем этим запросам, отправляя либо ответы «ok», либо «no», и вот почему »ответы для каждого из них.

+0

Хорошо, поэтому в этом случае я должен использовать «git rebase -i * branch_name *» без начала, редактировать то, что я хочу, а затем использовать «git push» для сохранения в удаленной ветви, правильно? – Ilman

+0

Да: но вам придется принудительно нажать (с опцией «аренда» или без нее), чтобы заставить их принять его. Прочтите другие ответы на это, чтобы узнать, с чем проблемы. Все они вытекают из того факта, что перед тем, как вы начнете, вы должны синхронизировать свой Git-репо, и он может снова получить * синхронизацию во время работы. – torek

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