ローカルで作ったリポジトリをgithubに初めてpushする方法
例えば以下のようにローカルにgitで管理していて、ふとgithubあたりで公開したくなったとする。はじめからgithubにレポジトリを持っていた場合は、それを $ git clone して、ローカルでごにょごにょして $ git push すればいいのだけど、その順番が逆の場合。
$ git init $ git add . $ git commit -m "initial commit" ...
ここで、あー、githubにpushしたいなーとふと思う。
おもむろにgithubにsign inしてrepositoryをnewする。仮にユーザ名がuser-nameでリポジトリがrepositoryというのを作ったすると、ローカルからのpushは下記のような感じになる。
$ git remote add origin git@github.com:user-name/repository
最初にremoteのリポジトリを指定する。
これでpushすればいいのだけど、先にローカルのレポジトリができているので、そのままpushしようとすると下記のように言われる。
$ git push origin master Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts. Identity added: /Users/user-name/.ssh/id_rsa (/Users/user-name/.ssh/id_rsa) To git@github.com:user-name/repository ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:user-name/repository' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.
fast-forward updateじゃないのでrejectされちゃう。
これは、remoteのレポジトリーをfetchしてmergeしてpushすればよい。
$ git fetch warning: no common commits remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From github.com:user-name/repository * [new branch] master -> origin/master $ git status # On branch master nothing to commit (working directory clean) $ git merge origin/master Merge made by the 'recursive' strategy. README.md | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) create mode 100644 README.md $ git status # On branch master nothing to commit (working directory clean) $ git push Counting objects: 248, done. Delta compression using up to 4 threads. Compressing objects: 100% (229/229), done. Writing objects: 100% (247/247), 85.98 KiB, done. Total 247 (delta 86), reused 0 (delta 0) To git@github.com:user-name/repository 1211ccd..18f61bd master -> master
というような感じでmergeがpushできた。mergeした時にコンフリクトしたらば、それは手動で解決する。
ローカルでごにょごにょしていて、会社のレポジトリにpushして社内で公開するような時にも同様にできると思う。
ssh-keyなどは事前に登録しておいてください。