On Thursday, October 30, 2014 2:41:42 AM UTC-4, Anthony Berglas wrote:
>
> I am trying to do something really simple.  I want to commit local changes 
> to a remote repository.  But along the way other developers modified the 
> remote.  This appears to be very difficult to do in Git.
>

You can modify the remote by using git push. It's not too difficult, but it 
can be confusing! 
 

> When I finished my changes I did a commit -a.  All good.
>
> But then the push failed.  git fetch ok.  So I tried to checkout the 
> origin/master.  That gave me a "detached head", even though it looked like 
> I was on head.  It said create a branch so I created abtmp (I do not 
> actually want any branches).  Then merged origin/master back into abtmp 
> (which seems the wrong way).
>

Believe it or not, I think you're partially there!

One key: the origin/master represents the master on the remote repository. 
You cannot use "git checkout origin/master", because origin/master is a 
remote-tracking branch. These exist as book marks the where master is on 
the remote.

So now I have the following.  What I want is to get rid of abtmp and commit 
> back to origin/master on the remote server.
>
> $ git log --oneline --decorate --graph --all
> *   5e0fcfb (HEAD, abtmp) Merge remote branch 'origin/master' into abtmp
> |\  
> | * 944773a (origin/master, origin/HEAD) - shrm has to be optional 
> logically (if s
> | * 4952f9c - correct to point by default
> * | 75b9d6d (master)  Performace tests
> |/  
> * c1106db - replace with st
> * b046367 - set back further
> * 5a3ce83 - fixup doc link reference
> * 2ca8ecf (tag: 7.0e) - this 
>

I'm really glad you posted this git log output. It really helps us 
understand the state of your repository. 

I read your history like this:

Your last work was on 75b9d6d, aka master. When you did the git push, it 
complained because your master wasn't in sync with the remote. You 
performed a git fetch, which brought in the commits that were on the 
remote. Doing git log shows you that the remote's master was 944773a, aka 
origin/master. Per the 'detached HEAD' message, you learned you needed a 
branch to work on origin/master. You created the branch abtmp. You then 
merged abtmp into origin/master, but from the git log output, I believe 
that abtmp was created while you were on your local master. Do you remember 
how you created the abtmp branch? 

I say all this because 5e0fcfb, the abtmp branch, seems to have 944773a 
(origin/master) and 75b9d6d (master) as its parents.

To help further, give us the output of these commands:

git branch
git log --abbrev-commit --parents -n 1

This should give abtmp as the current branch, and it should say 944773a and 
75b9d6d in the commit line. 

>
> Questions:-
>
>    1. How do I fix this up.
>    
>  I believe given the graph output that all you need to do is:

git checkout master
git merge abtmp

This will send master to the same commit as abtmp (because it should be a 
fast-forward merge), and you can then type:

git branch -D abtmp

This will delete the abtmp branch. 

>
>    1. What is the best way to deal with these simple conflicts in future.
>
> You're doing it already: git fetch, and then carefully merging 
origin/master back into your branch. If your concerned or paranoid, you can 
clone your repository to a separate directory, and try out the steps in 
your clone.

Is there any doc that goes over this clearly. (e.g. not 
> http://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes which goes 
> over setting up multiple remotes etc. and other cleverness but not the 
> basics.)
>

I'm writing a book that is going over the basics. There are other resources 
out there, though. Search for git merge, git branch, and remote-tracking 
branches. 

Good luck!
--
Rick Umali / Author: "Learn Git in a Month of Lunches" / 
www.manning.com/umali

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to