How to preview git-pull without doing fetch?

前端 未结 8 1972
天涯浪人
天涯浪人 2020-11-29 14:41

Is it even possible?

Basically, there\'s a remote repository from which I pull using just:

git pull

Now, I\'d like to preview what

相关标签:
8条回答
  • 2020-11-29 15:14

    I created a custom git alias to do that for me:

    alias.changes=!git log --name-status HEAD..
    

    with that you can do this:

    $git fetch
    $git changes origin
    

    This will get you a nice and easy way to preview changes before doing a merge.

    0 讨论(0)
  • 2020-11-29 15:14

    I use these two commands and I can see the files to change.

    1. First executing git fetch, it gives output like this (part of output):

      ...
      72f8433..c8af041  develop -> origin/develop
      ...

    This operation gives us two commit IDs, first is the old one, and second will be the new.

    1. Then compare these two commits using git diff

      git diff 72f8433..c8af041 | grep "diff --git"

    This command will list the files that will be updated:

    diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
    diff --git a/app/view/yyyy.php b/app/view/yyyy.php
    

    For example app/controller/xxxx.php and app/view/yyyy.php will be updated.

    Comparing two commits using git diff prints all updated files with changed lines, but with grep it searches and gets only the lines contains diff --git from output.

    0 讨论(0)
  • 2020-11-29 15:16

    If you don't want git-fetch to update your local .git, just copy your local repo to a temp dir and do a pull there. Here is a shor-hand:

    $ alias gtp="tar -c . | (cd /tmp && mkdir tp && cd tp && tar -x && git pull; rm -rf /tmp/tp)"
    

    Ex.:

    $ git status
    # On branch master
    nothing to commit (working directory clean)
    
    $ gtp
    remote: Finding sources: 100% (25/25)
    remote: Total 25 (delta 10), reused 25 (delta 10)
    Unpacking objects: 100% (25/25), done.
    From ssh://my.git.domain/reapO
       32d61dc..05287d6  master     -> origin/master
    Updating 32d61dc..05287d6
    Fast-forward
     subdir/some.file       |    2 +-
     .../somepath/by.tes    |    3 ++-
     .../somepath/data      |   11 +++++++++++
     3 files changed, 14 insertions(+), 2 deletions(-)
    
    $ git status
    # On branch master
    nothing to commit (working directory clean)
    
    $ git fetch
    remote: Finding sources: 100% (25/25)
    remote: Total 25 (delta 10), reused 25 (delta 10)
    Unpacking objects: 100% (25/25), done.
    From ssh://my.git.domain/reapO
       32d61dc..05287d6  master     -> origin/master
    
    $ git status
    # On branch master
    # Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.
    #
    nothing to commit (working directory clean)
    
    0 讨论(0)
  • 2020-11-29 15:21

    I may be late to the party, but this is something which bugged me for too long. In my experience, I would rather want to see which changes are pending than update my working copy and deal with those changes.

    This goes in the ~/.gitconfig file:

    [alias]
            diffpull=!git fetch && git diff HEAD..@{u}
    

    It fetches the current branch, then does a diff between the working copy and this fetched branch. So you should only see the changes that would come with git pull.

    0 讨论(0)
  • 2020-11-29 15:24

    After doing a git fetch, do a git log HEAD..origin/master to show the log entries between your last common commit and the origin's master branch. To show the diffs, use either git log -p HEAD..origin/master to show each patch, or git diff HEAD...origin/master (three dots not two) to show a single diff.

    There normally isn't any need to undo a fetch, because doing a fetch only updates the remote branches and none of your branches. If you're not prepared to do a pull and merge in all the remote commits, you can use git cherry-pick to accept only the specific remote commits you want. Later, when you're ready to get everything, a git pull will merge in the rest of the commits.

    Update: I'm not entirely sure why you want to avoid the use of git fetch. All git fetch does is update your local copy of the remote branches. This local copy doesn't have anything to do with any of your branches, and it doesn't have anything to do with uncommitted local changes. I have heard of people who run git fetch in a cron job because it's so safe. (I wouldn't normally recommend doing that, though.)

    0 讨论(0)
  • 2020-11-29 15:26

    You can fetch from a remote repo, see the differences and then pull or merge.

    This is an example for a remote repo called origin and a branch called master tracking the remote branch origin/master:

    git checkout master                                                  
    git fetch                                        
    git diff origin/master
    git pull --rebase origin master
    
    0 讨论(0)
提交回复
热议问题