how to do a git diff of current commit with last commit using gitpython?

前端 未结 5 1126
故里飘歌
故里飘歌 2021-01-14 05:12

I am trying o grasp gitpython module,

hcommit = repo.head.commit
tdiff = hcommit.diff(\'HEAD~1\')

but tdiff = hcommit.diff(\'HEAD^ H

相关标签:
5条回答
  • 2021-01-14 05:17

    Sorry to dig up an old thread... If you need to find out which files changed, you can use the .a_path or .b_path attribute of a diff object depending on which one you feed it first. In the example below I'm using the head commit as a so I look at a.

    e.g:

    # this will compare the most recent commit to the one prior to find out what changed.
    
    from git import repo
    
    repo = git.Repo("path/to/.git directory")
    repoDiffs = repo.head.commit.diff('HEAD~1')
    
    for item in repoDiffs:
        print(item.a_path)
    
    0 讨论(0)
  • 2021-01-14 05:24
    import git
    
    repo = git.Repo('repo_path')
    commits_list = list(repo.iter_commits())
    
    # --- To compare the current HEAD against the bare init commit
    a_commit = commits_list[0]
    b_commit = commits_list[-1]
    
    a_commit.diff(b_commit)
    

    This will return a diff object for the commits. There are other ways to achieve this as well. For example (this is copy/pasted from http://gitpython.readthedocs.io/en/stable/tutorial.html#obtaining-diff-information):

    ```

        hcommit = repo.head.commit
        hcommit.diff()                  # diff tree against index
        hcommit.diff('HEAD~1')          # diff tree against previous tree
        hcommit.diff(None)              # diff tree against working tree
    
        index = repo.index
        index.diff()                    # diff index against itself yielding empty diff
        index.diff(None)                # diff index against working copy
        index.diff('HEAD')              # diff index against current HEAD tree
    

    ```

    0 讨论(0)
  • 2021-01-14 05:34

    To get the contents of the diff:

    import git
    repo = git.Repo("path/of/repo/")
    
    # define a new git object of the desired repo
    gitt = repo.git
    diff_st = gitt.diff("commitID_A", "commitID_B")
    
    0 讨论(0)
  • 2021-01-14 05:37

    I figured out how to get the git diff using gitPython.

    import git
    repo = git.Repo("path/of/repo/")
    
    # the below gives us all commits
    repo.commits()
    
    # take the first and last commit
    
    a_commit = repo.commits()[0]
    b_commit = repo.commits()[1]
    
    # now get the diff
    repo.diff(a_commit,b_commit)
    

    Voila !!!

    0 讨论(0)
  • 2021-01-14 05:40

    For a proper solution (without using git command callback), you have to use create_patch option.

    To compare current index with previous commit:

    diff_as_patch = repo.index.diff(repo.commit('HEAD~1'), create_patch=True)
    print(diff_as_patch)
    
    0 讨论(0)
提交回复
热议问题