Git-理解diff命令的输出

时间:2017-01-05 13:34:27

标签: python django git version-control git-merge

我最近接手了Python / Django项目的开发,其中Git用作软件维护和发布等的版本控制。

之前没有多少使用过Git,我仍然习惯了如何使用它来有效地管理版本控制。

我最近将一些更改推送到服务器以修复特定错误 - 此错误现已得到修复,并且该功能在该软件的实时版本上正常运行。

但是,在合并我正在开发的branchmaster分支时,我需要reset到旧版本的代码,因为我设法打破了我的本地master分支。

现在,将我的本地master推送到服务器,并实现了此错误的修复,似乎我在服务器上打破了另一个页面 - 这个页面出现了一些问题大概一个月前,我当时修复的,我在本地主人上执行的reset是几天前修改过的版本,所以这个bug不应该出现在我重置的版本中,但不知怎的,这似乎打破了这个其他页面,即使它在将最新的错误修复推送到服务器之前工作。

我在我的本地计算机上有几个分支,所以尝试检查一个旧分支,我知道这个页面仍然有效 - 并且在我的本地服务器上浏览过它,我可以看到它确实存在。

然后我运行了git diff master exportAddsOmits,其中exportAddsOmits是旧分支的名称,其中的页面仍然正常工作。此命令产生以下输出:

 (moon) user:moon user$ git diff master exportAddsOmits
diff --git a/buying/views.py b/buying/views.py
index 08d2fd6..b2f8fe6 100644
--- a/buying/views.py
+++ b/buying/views.py
@@ -651,10 +651,7 @@ def order(request, supplier_id):
            # project = Project.objects.get(id=request.GET.get('project'))
            order_form.initial['project_raw'] = request.GET.get('project')

 -       #project_choices = OrderItem.NON_PROJECT_CHOICES+[('', '-----')]+[(project.id, project.project_name) for project in Project.objects.filter(archived=False, detailed_status=Project.ds9).order_by('project_name')]
-       #(23/11/2016 @ 1110) Add 'Deposit Received' projects to drop down in 'Item Project':
       project_choices = OrderItem.NON_PROJECT_CHOICES+[('', '-----')]+[(project.id, project.project_name) for project in Project.objects.filter(archived=False, detailed_status=Project.ds9).order_by('project_name')]+[(project.id, project.project_name) for project in Project.objects.filter(archived=False, detailed_status=Project.ds8).order_by('project_name')]
-
 +       project_choices = OrderItem.NON_PROJECT_CHOICES+[('', '-----')]+[(project.id, project.project_name) for project in Project.objects.filter(archived=False, detailed_status=Project.ds9).order_by('project_name')]
    top_category_choices = [('', '')] + [(cat.id, cat.name) for cat in Category.objects.filter(parent__isnull=True).distinct().only('name')[:10]] + [('OP', 'Office Purchase')]


 diff --git a/costing/models.py b/costing/models.py
index 5b78684..d845da7 100644
--- a/costing/models.py
+++ b/costing/models.py
@@ -732,12 +732,8 @@ class Deposit(models.Model):
    def adjust_payment(self):
            p = Payment.objects.get_or_create(project=self.project, is_booking_deposit=True)[0]
            p.date_paid = self.date_received
-               print "p.date_paid has been set to self.date_received in Deposit.adjust_payment (costing/models.py)"
            p.amount_exc_vat = self.amount_exc_vat
-               #p.deposit = self.deposit
-               # ERF(21/11/2016 @ 1645) Try adding a line for date_received
-               #p.date_received = self.date_received
-               #print "p.date_received is being set to self.date_received in costing/models.py (line 739): %s " % p.date_received
+               p.deposit = self
            p.save()

         def __str__(self):
 diff --git a/costing/templates/costing/adds_omits.html b/costing/templates/costing/adds_omits.html
index 4d28188..a33fde5 100644
--- a/costing/templates/costing/adds_omits.html
+++ b/costing/templates/costing/adds_omits.html
@@ -24,12 +24,6 @@

我不确定如何理解这一点...有很多行以+-开头,我理解为{{1} }命令显示第一个分支中存在的行,但第二个分支中不存在的行,或者第一个分支中不存在的行,但是第二个分支中存在的行...但我不知道哪个方向这是...

第一个分支中存在以diff开头的行是-(即diff),而不是第二个分支(即master)和以exportAddsOmits行开头的行不会出现在第一个分支(+)中,而是在第二个分支(master)中,或者是相反的方式?

我是否需要手动解决这些差异,还是可以将旧分支(exportAddsOmits)与我的exportAddsOmits分支合并?如果我合并,这是否可能撤消我刚刚实施的修复?

2 个答案:

答案 0 :(得分:1)

每个差异适用于两个分支中不相同的每个文件

- 行显示第一个分支中从此文件中删除的行,而不是第二个分支版本

+行显示你从第二个分支添加到文件中的行,而不是第一个分支版本

它的工作方式是每次更改文件的一行时它会生成一个 - 而且+就像它删除旧行并添加一个新行,即使你只改变了一行中的一个字符。

未加固定的行只是没有改变,而且还有上下文

希望有所帮助

答案 1 :(得分:1)

无论你使用什么git diff master exportAddsOmits( - 用于主分支文件,+用于exportAddsOmits分支文件)或git diff exportAddsOmits master( - 用于exportAddsOmits分支文件,+用于主分支文件),git将为您提供类似的输出有很多不同。因为 git diff命令会在两个分支之间提供文件差异。我们确定,两个分支中的文件是不同的,因此两个命令都应该有输出。

当您运行git merge exportAddsOmits时,它显示已经是最新的。这是由两个分支之间的提交历史引起的,就像

一样
A---B---C---D              exportAddsOmits
             \
               E---F---G   master

所以你应该比较两个分支提交差异而不是文件差异。您可以使用git log exportAddsOmits..master,将在master分支中显示提交但在exportAddsOmits分支中不显示。并且git log master..exportAddsOmits将没有输出,因为exportAddsOmits比主分支更旧(或者我们称之为父分支)。