2013-09-06 5 views
3

Это странно. Там, по-видимому, есть разница между перезагрузкой моего местного филиала develop и удаленной веткой develop. Вот некоторые подробности:git rebase - разница между переустановкой и развитием/развитием?

Так скажем, у меня есть функция ветвь, feat, который я перебазирования время от времени:

git pull --rebase origin develop 

Это работает нормально. Но теперь я сделал и готов раздавить мои фиксации и я заметил большую разницу между:

git rebase -i origin develop 

и

git rebase -i develop 

Бывшие воспитывает мой редактор с ОГРОМНЫМ списка коммитов develop, ни один из них не является моим изменением на feat. Он также переключает меня на ветку develop. Последний вызывает мой редактор только моими коммитами на feat и не переключает меня в мою локальную ветвь develop.

Действительно ли git rebase -i origin develop действительно переключает меня в мой местный develop, а затем перезаряжается на пульте дистанционного управления? Предполагаю ли я git checkout develop; git pull, а затем git checkout feat; git rebase -i develop?

ответ

4
git rebase -i origin develop 

не правильный синтаксис для использования rebase.

git rebase -i develop 
# or this, for the remote-tracking branch 
git rebase -i origin/develop 

- это правильные синтаксисы.

official Linux Kernel Git documentation for git rebase говорит, что это общий синтаксис (опуская некоторые опции для ясности):

git rebase [-i] [<upstream>] [<branch>] 

где <upstream> является филиалом:

<upstream> 

Upstream отделение для сравнения. Может быть любое допустимое commit, а не только существующее имя ветки. По умолчанию настроен восходящий поток для текущей ветви.

Когда вы используете git rebase -i origin develop, origin - это имя вашего пульта, а не ответвления. Если вы хотите, чтобы перебазироваться против origin/develop, вам нужно использовать разделитель пути /:

git rebase -i origin/develop 

Что касается вашего вопроса:

Является git rebase -i origin develop на самом деле переключения меня мой местный разработать и затем перебазирования против пульта дистанционного управления ?

Возможно, он переключился на ваш местный develop, но поскольку синтаксис даже недействителен, я не уверен на 100%.Поэтому я говорю, может быть, это потому, что поведение rebase при передаче действительной вверх по течению ветви, а другая ветвь является проверкой второй ветви, прежде чем перебазирования против первого:

Если <branch> указано, git rebase выполнит автоматическую git checkout <branch> прежде чем делать что-либо еще. В противном случае он остается в текущей ветке.

Наконец, git rebase -i develop и git rebase -i origin/developможет отличаться, если ваш локальный develop не обновлять актуальный с вашего удаленного отслеживания ветви origin/develop, как если бы вы git fetch и никогда не сливаются обновлений в локальный develop ,

+0

Я просто ударил себя в лоб. Умственно. Синтаксис «удаленная ветка» и «удаленный/ветвь» всегда меня отбрасывает. Мне жаль, что они не застряли в одном формате. Спасибо! – CaptSaltyJack

+1

Для типичного повседневного использования Git, возможно, это поможет подумать об этом таким образом. Когда вы выполняете сетевые операции с удаленным (например, 'push',' push', 'fetch'), вам нужно указать удаленный доступ к переговорам, таким образом,' remote branch', или если на удаленном сервере есть ветви с именами, даже 'remote Пространство имен/branch'. Если вы не разговариваете с пультом дистанционного управления, вам нужен ссылочный (то есть ответ) путь. Помните, что 'remote/branch' является сокращением для пути' refs/remotes/remote/branch', который находится в каталоге '.git' вашего репо. Когда вы просто говорите «ветвь», это сокращение для 'refs/heads/branch' в том же каталоге' .git'. –

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