Coming from an svn background, I had this question:
git equivalent of svn status -u
(what is the git equivalent of svn status -u)
And I understand, you do:
git fetch
git log ..origin/master
But, I’m guessing the origin/master part depends on the branch? It wouldn’t necessarily be master if I was tracking a remote branch?
I also don’t understand the git merge origin/master precisely. I’m guessing that just means that git fetch grabbed the changes from the remote and put them into the git database system as origin/master and I’m in just master? What if I fetched changes, check what was done, am horrified by the changes and don’t want to merge? How do I basically abandon them?
git fetch
git fetchgrabs changes from remote repository and puts it in your repository’s object database. It also fetches branches from remote repository and stores them as remote-tracking branches.When you are fetching git tells you where it stores each branch on remote repository it fetches. For example you should see something like
when fetching. This means that ‘origin/master’ stores where ‘master’ is on ‘origin’ repository.
If you examine
.git/configfile, you would see the following fragment:[remote "origin"] url = git://git.example.com/repo.git fetch = +refs/heads/*:refs/remotes/origin/*This (among others) means that any branch ‘A’ (‘refs/heads/A’) in origin remote (repository you cloned from) would be saved as ‘origin/A’ (‘refs/remotes/origin/A’).
git log ..origin/master
As you can see ‘origin/master’ is ‘master’ in origin. If you are on (default) ‘master’ branch, then
git log ..origin/master, which is equivalent togit log HEAD..origin/master, which when on ‘master’ branch is equivalent togit log master..origin/masterwould list all commits that are on ‘master’ branch in remote repository and are not in local ‘master’ branch where you do your work.The more generic version in modern git (assuming that upstream / tracking information exists) would be to use simply
(Here
@{u}is synonym for@{upstream}, see gitrevisions manpage).git merge origin/master
git mergeis used to join two lines of history. If one of sides didn’t do any work since last branching point (since merge base), the situation is either fast-forward (the branch you are on is simply updated to the tip of the branch you are merging), or up-to-date (there is nothing new to merge, and the branch you are on stays unchanged).git fetchfollowed bygit merge origin/master, when on ‘master’ branch, is equivalent to issuingIf you don’t want to merge, you don’t need to. Note that you can use e.g.
git reset --hard HEAD@{1}to go back and discard result ofgit pullif you don’t like it.