2013-04-03 2 views
1

Иногда я набираю случайное имя неправильной ветви, когда я делаю «git pull origin BRANCH».
Есть ли способ запретить «git pull origin XXX», когда XXX не является той же веткой, которую я проверил в моем локальном хранилище? то есть разрешить «git pull» только в том случае, если ветвь с проверкой по местности - XXX, а не YYY.Предотвратить слияние при git pull

То есть, я хочу «слить», чтобы hapen, но только если я вытащил ту же ветку, которую я сейчас проверил в своем локальном репозитории. Есть ли способ, которым я могу настроить локальный репозиторий, чтобы разрешить «git pull» только из одного имени ветки?

Например: Случая 1:
Текущие проверяются филиал на локальном хранилище является «тестом»

[* test ] /code$ git pull origin master 

Это сливает код с «тестом» ветвпа к моему местному отделению «мастера». ==> Я хочу запретить это.

Случай 2:

Текущие проверяются филиал на локальном хранилище является «мастером»

[* master ] /code$ git pull origin master 

Это сливает изменения удаленного филиала «мастер» в моем местное отделение «мастера». ==> Это в порядке.

Надеюсь, я хорошо объяснил свою проблему.

Заранее спасибо.

ответ

3

Вы должны использовать git fetch

который делает following:

Выдает все объекты из удаленного хранилища, которые не присутствуют в местной.

EDIT:

What is the difference between 'git pull' and 'git fetch'? ("git pull does a git fetch followed by a git merge")

EDIT 2:

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

Но вы можете сменить проект на последний фиксатор до вытягивания с помощью git pull --abort не проверял, должно быть, это что-то вроде этого.

Ещё одна вещь, которую вы можете сделать, это git checkout до SHA1 филиала до того, как вы сделали git pull.

Помните, что вы всегда можете отменить все по (необратимое):

git clean -fd 
git reset HEAD --hard 
+0

Не понимайте, что вы хотите, выходите на мастер-ветку, а затем потяните, и он будет объединен с текущей веткой – 0x90

+0

, можете ли вы, пожалуйста, переписать свой вопрос? и сделать его более понятным – 0x90

+0

AFAIK вы не можете этого сделать, так как локальные ветви ортогональны тем, что на сервере. но я думаю, что есть кое-какие взломы. Я имел в виду, что вы должны обновить свой оригинальный язык, чтобы другие могли вам помочь, BTW, если это может быть сделано, кто-то из SO знает это наверняка и ответит на ваш вопрос. – 0x90

1

Использование git fetch, не сливаться код.git pull на самом деле является комбинацией двух команд git fetch с последующим git merge

0

С 'человек ГИТ-тянуть':

git pull runs git fetch with the given parameters and calls git merge to 
    merge the retrieved branch heads into the current branch. 

Таким образом,

git fetch origin master 

не делает автоматического слияния.

Вы также можете сделать:

git fetch origin master:tmp 

создать новую ветвь «TMP» из извлеченной мастер отрасли.
Тогда git merge FETCH_HEAD покажет вам любые конфликты.

Это вы имели в виду?

1

Не волнуйтесь слишком много, вы можете отменить беспорядок путем разумного использования git reset. Просто убедитесь, что каждый раз, когда вы вытаскиваете свой репозиторий, находится в форме корабля.

+0

есть ли простая команда, чтобы полностью свернуть слияние? – dritan

+0

@dritan, 'git reset --hard HEAD ^' должен делать. – vonbrand

+0

Да, но это сбрасывает только последнюю фиксацию. во время слияния там возможно более одного коммита, которые сливаются. То есть, мне нужно выяснить, сколько коммитов объединено, а затем запустить git reset --hard HEAD ~ 3 #, чтобы сбросить последние 3 коммита – dritan

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