2013-11-13 4 views
1

Администратор сказал мне, чтобы я не сливался, развиваясь в мои ветви, прежде чем нажимать их на удаленный, и что я должен создавать новые ветви на основе мастера, таким образом, никакой код от разработки не будет случайно слит в мастер , Хорошо, это работало нормально в течение нескольких недель, но пару дней назад я случайно слился в одну из моих ветвей. Это не создавало большой проблемы для администратора, он просто сказал мне не делать этого снова, но с тех пор я начал использовать «git branch --contains», чтобы убедиться.git branch содержит другую нежелательную ветку

Проблема: Когда я получать удаленный мастер и запустить «Git филиал --contains», это показывает, что разработка является частью его:

git branch --contains 
    develop 
* master 

Как это может быть возможно ??

Я вижу 3 возможного объяснения:

  1. дистанционного мастер был в каком-то момент случайно объединился с разработкой
  2. некоторых неизвестной ошибки
  3. Я не обновляя свой местный филиал правильно с извлеченной мастера

  1. очень unlik Ely с администратором является гуру, который не мог бы позволить этому случиться
  2. является то, что я подозреваю, что происходит
  3. возможно, но я думаю, что я делал это правильно все эти недели с этим кодом:

git fetch 
git checkout master 
git reset --hard origin/master 
git clean -f 
git pull origin master 

так до тех пор, как развить в мастера я не могу создавать/толкать новые ветви.

Любая идея, что происходит?

ответ

0

Проблема была в моем понимании git branch --contains. Он не отображает ветви, содержащиеся в текущей проверенной ветке, но ветви, которые содержат это.

Так, чтобы знать, если master содержит develop я должен сделать

git checkout develop 
git branch --contains 
* develop 

Так что не было никаких проблем, в конце концов. Как показано на рисунке, master не является частью списка филиалов, которые содержат develop.

Хотя это показало, что develop действительно содержит master, но это нормально.

git checkout master 
git branch --contains 
    develop 
* master 
+0

Это будет легче запомнить, если вы помните, что 'Git филиал --contains' принимает SHA-1 аргумент:' GIT отделения---contains bbfec67' говорит вам, какие ветви имеют, что совершить. Без окончательного аргумента 'git branch --contains' означает« разрешить commit 'HEAD» на идентификатор SHA-1, а затем найти ветви, которые содержат это ». – torek

1

Возможно, что ваш местный филиал develop не был обновлен с момента последнего совершения сделки до master. Убедитесь, что ваш местный develop филиал до даты:

git checkout develop 
git fetch 
git merge --ff-only origin/develop 

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

git log --oneline --decorate --graph --all 

Или это одно, если вы больше GUI человека:

gitk --all 

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

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