2016-12-07 2 views
0

Я недавно начал работу над проектом Python/Django, который использует Git в качестве контроля версии.Git- понимание вывода команды diff

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

Моя мысль состояла в том, чтобы сравнить конкретные файлы в моей локальной ветви, где изменения, которые я хочу объединить, с теми же файлами на главной ветке, чтобы я мог видеть, какие изменения я хочу сохранить, а какие Я хочу отказаться. Затем я планировал создать новую ветку от master и вручную копировать несколько изменений, которые я хочу сохранить из текущего локального ветви.

Я побежал следующую команду из моего местного отделения:

git diff budgetsReports3 master -- costing/views.py 

, чтобы увидеть различие между views.py файлом в costing приложения на моей местном budgetsReports3 отрасли и master отрасли.

Эта команда производит следующий вывод:

diff --git a/costing/views.py b/costing/views.py 
index 452b082..f8a3f77 100644 
--- a/costing/views.py 
+++ b/costing/views.py 
@@ -1324,12 +1324,6 @@ def report_overview(request, project_id): 
    project = Project.objects.get(id=project_id) 

     budget = get_current_budget(project_id) 
-  #(01/12/2016 @ 1410) Add the missing code that's used in report_ccis(...) to display the individual CCI items on this page 
-  cci_total_exc_final = budget.cci_total_exc_vat_final 
-  print("cci_total_exc_final value in report_overview: ", cci_total_exc_final) 
-  cci_grouped_items = budget.cci_items.all().order_by('project_room', 'name') 
-  print("cci)grouped_items value in report_overview: ", cci_grouped_items) 
-  #(01/12/2016 @ 1410) Added missing code... 
    if not budget and not project.budget_versions.filter(current_marker=1): 
      Budget.objects.create(project=project, current_marker=1) 

@@ -1343,9 +1337,6 @@ def report_overview(request, project_id): 
      'project': project, 
      'budget': budget, 
      'cci_total_exc': cci_total_exc, 
-    #(01/12/2016 @ 1410) Add the missing code that's used in report_ccis(...) to display the individual CCI items on this page 
-    'cci_grouped_items': cci_grouped_items, 
-    #ERF(01/12/2016 @ 1410) Added missing code... 
      'item_total_exc': item_total_exc, 
      'total_exc': total_exc, 
      'total_exc_2': total_exc_2, 
@@ -1460,15 +1451,11 @@ def report_by_class(request, project_id): 

def report_ccis(request, project_id): 
    """ CCI items styled for pdf """ 
-  print ("report_ccis called from costing/views.py (line 1463) ") 
    project = Project.objects.get(id=project_id) 
    budget = get_current_budget(project_id) 
-  #(06/12/2016 @ 1450) Create a boolean to determine whether or not to display 'Latest Sum' 

    cci_total_exc = budget.cci_total_exc_vat_final 
    cci_grouped_items = budget.cci_items.all().order_by('project_room', 'name') 
-  print ("Value of cci_total_exc in costing/views.py (line 1469): ", cci_total_exc) 
-  print ("Value of cci_grouped_items in costing/views.py (line 1470): ", cci_grouped_items) 

Я могу видеть, что различия между версиями файла на каждой из ветвей, выделены красным цветом, но я не уверен, ветвь показывая, какая «разница» - предположительно все различия, показанные командой diff, где файл на моей локальной ветке отличается от файла на моей главной ветке? Поэтому мне просто нужно было просмотреть их и посмотреть, какие из них я хочу сохранить/объединить с моей главной ветвью? Или это показывает различия в обратном направлении?

+3

Отличие от первого элемента ко второму пункту в вашей команде. Например, строки, начинающиеся с '-', существуют только в первом элементе и должны быть удалены, чтобы сначала создать второй элемент. – spectras

ответ

0

Я в настоящее время ряд отраслей разработки и хотите объединить некоторые изменения в моей текущей ветке с мастером, но не хотим объединять все изменения из этой ветви.

До тех пор, пока вы хотите объединить только некоторые изменения (а не другие) из одной ветви в другую, слияние само по себе не является инструментом для использования (в git в любом случае). В git слияние означает, что все в этой ветке слито в другую ветвь.

Есть несколько способов исходящее:

  1. базирующийся слияния рабочих процессов: Использование git rebase -i переписать историю вашей отрасли budgetsReports3 так, что изменения, которые вы хотите объединить самодостаточны в одном или нескольких фиксаций прежде чем все остальные совершают. Затем объедините только те коммиты, которые нужно освоить. И, вероятно, слияние мастера в бюджетыReports3.

  2. Основанный на базах данных рабочий процесс: переписать бюджетыReports3 (как в 1), но затем переустанавливать бюджетыReports3 на master. Затем объедините автономные коммиты для овладения. Это будет быстрое слияние.

  3. Рабочий процесс, основанный на различиях: возьмите git diff (в другом направлении), используйте git для применения к master, используйте git add -p, чтобы добавить только некоторые различия, фиксации и rebase budgetReports3 сверху мастера. Например:

    git checkout budgetsReports3 # if not already there 
    git diff master budgetsReports3 -- costing/views.py > views.diff 
    git checkout master 
    git apply views.diff 
    git add -p costing/views.py # follow the prompts to choose which patch hunks you want to apply 
    git commit -m "your message" 
    git reset HEAD costing/views.py 
    git checkout costing/views.py 
    git checkout budgetsReports3 
    git rebase master 
    

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

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