What are the Git commands to do the following workflow?
Scenario
I cloned from a repository and did some commits of my own to my local repository. In the meantime, my colleagues made commits开发者_C百科 to the remote repository. Now, I want to:
Check whether there are any new commits from other people on the remote repository, i.e.
origin?Say there were three new commits on the remote repository since my last pull, I would like to diff the remote repository's commits, i.e.
HEAD~3withHEAD~2,HEAD~2withHEAD~1andHEAD~1withHEAD.After knowing what changed remotely, I want to get the latest commits from the others.
My findings so far
For step 2: I know the caret notation HEAD^, HEAD^^ etc. and the tilde notation HEAD~2, HEAD~3, etc.
For step 3: That is, I guess, just a git pull.
You could git fetch origin to update the remote branch in your repository to point to the latest version. For a diff against the remote:
git diff origin/master
Yes, you can use caret notation as well.
If you want to accept the remote changes:
git merge origin/master
git remote update && git status 
Found this on the answer to Check if pull needed in Git
git remote updateto bring your remote refs up to date. Then you can do one of several things, such as:
git status -unowill tell you whether the branch you are tracking is ahead, behind or has diverged. If it says nothing, the local and remote are the same.
git show-branch *masterwill show you the commits in all of the branches whose names end in master (eg master and origin/master).If you use
-vwithgit remote updateyou can see which branches got updated, so you don't really need any further commands.
A good way to have a synthetic view of what's going on "origin" is:
git remote show origin
I just use
git remote update
git status
The latter then reports how many commits behind my local is (if any).
Then
git pull origin master
to bring my local up to date :)
My regular question is rather "anything new or changed in repo" so whatchanged comes handy. Found it here.
git whatchanged origin/master -n 1
One potential solution
Thanks to Alan Haggai Alavi's solution I came up with the following potential workflow:
Step 1:
git fetch origin
Step 2:
git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0
Step 3:
git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master
git status does not always show the difference between master and origin/master even after a fetch.
If you want the combination git fetch origin && git status to work, you need to specify the tracking information between the local branch and origin:
# git branch --set-upstream-to=origin/<branch> <branch>
For the master branch:
git branch --set-upstream-to=origin/master master
I simply use
git fetch origin
to fetch the remote changes, and then I view both local and pending remote commits (and their associated changes) with the nice gitk tool involving the --all argument like:
gitk --all
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
 加载中,请稍侯......
      
精彩评论