Git-理解diff命令的输出

时间:2016-12-07 11:31:51

标签: python django git

我最近开始研究一个使用Git作为版本控制的Python / Django项目。

我对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)

我可以看到每个分支上的文件版本之间的差异以红色突出显示,但我不确定哪个分支显示哪个“差异” - 可能是{{{{ 1}}命令是我本地分支上的文件与主分支上的文件不同的地方?所以我只需要查看这些内容,看看我想保留/合并哪些主分支?或者它是否反过来显示出差异?

2 个答案:

答案 0 :(得分:0)

git diff budgetsReports3 master可以理解为"需要对budgetsReports3进行哪些更改才能使其显示为master"

理解差异的一个很好的资源是https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/diffs

答案 1 :(得分:0)

  

我目前有许多开发分支 - 并希望将当前分支上的一些更改与主服务器合并,但不希望合并此分支中的所有更改。

只要您想将一些更改(而不是其他更改)从一个分支合并到另一个分支,合并本身就不是使用的工具(无论如何都是git)。在git中,合并意味着此分支中的所有内容都已合并到另一个分支中。

有几种方法可以继续:

  1. 基于合并的工作流程:使用git rebase -i重写budgetsReports3分支的历史记录,以便在所有其他提交之前,您要合并的更改将自包含在一个或多个提交中。然后合并那些提交到master。并且可能将master合并到budgetsReports3。

  2. 基于rebase的工作流程:重写budgetsReports3(如1中所示),然后在master上重新定义budgetsReports3。然后将自包含的提交合并到master。这将是一次快速合并。

  3. 基于差异的工作流:使用git diff(在另一个方向),使用git apply将其应用于master,使用git add -p仅添加一些diff,commit和rebase budgetReports3 on高手的顶部。例如:

    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
    
  4. 就个人而言,我更喜欢基于rebase的工作流程,但这取决于你。另请注意,如果您已经共享(您已推送或其他人已经推送)您的budgetsReports3分支到另一个仓库,则不建议使用rebase(除非您真的知道自己在做什么)。