I'm learning git on my mac os x. I've enabled ssh on my mac, and try to simulate both remote repo and local repo.
I run into the case that after I change my file in local repo, git add/commit/push succeeded, I don't see the change on my remote repo. My steps are like this: Create the remote repo
$cd ~/learn
$mkdir gittest
$cd gittest/
$git init
$git config --global user.name "username"
$git config --global user.email "useremail"
$touch readme
$git add readme
$git commit -m "empty"
OK, everything fine, then in another directory, I did:
$cd ~/learn/client
$git clone trosky@localhost:/Users/trosky/learn/gittest
$cd gittest
$vi readme(add one line)
$git add .
$git commit -m "add line"
$git push origin master:refs/for/master
Seems ok, git push prints:
Counting objects: 3, done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To x@localhost:/Users/trosky/learn/gittest
* [new branch] master -> refs/for/master
$git log
I can see 2 records.
commit e4a3af902d8d3b708509073e4fd2281ab8355cf0
Author: username <useremail>
Date: Fri Dec 23 20:54:52 2016 +0800
add line
commit e024e83b1227f8d1e585cad66e7a4f9b3bb12462
Author: username <useremail>
Date: Fri Dec 23 20:53:18 2016 +0800
empty
But in the gittest directory, I can only see 1 git log and the file is still empty
$git log
commit e024e83b1227f8d1e585cad66e7a4f9b3bb12462
Author: username <useremail>
Date: Fri Dec 23 20:53:18 2016 +0800
empty
This is so weird. I repeated the process several times, each time the same result. Why is that and how to fix?
You’re pushing to
refs/for/master
, notrefs/heads/master
so what you pushed will not appear as a “real” branch. Instead, you’re pushing torefs/for/*
which is a common refspec from code reviewing tools like Gerrit.If you’re using one of these tools, you should check whether your push generated a code review item somewhere; or consult the manual to make sure that you’re doing everything correctly.
Otherwise, if you just want to push the master branch, then push correctly to
refs/heads/master
or just usegit push origin master
assuming the default configuration for your remote.