git 常用使用及问题记录
1、打开bash,进入工程根目录(引用whaon的话:是和.classpath和.project同级的目录)。PS:我的系统是win7,在bash切换到E的命令是 cd /e;
2、运行 git init 初始化代码仓库(repository)
3、运行git add .将该目录下的所有文件全部提交到缓冲区
4、运行git commit -m "helloword init"将代码提交到HEAD,此时还没有提交到服务器
5、运行git remote add origin http://git.oschina.net/yourname/helloworld.git
6、git push origin master
其中第5和6步骤容易出现问题,lz就出现的问题和解决的方法列出
问题一:"NOT FOUND"
解决方法:正如前面所述,如果没有在osc@git 上创建空项目就会出现这个问题
问题二:"![rejected] master -> master (fetch first)"
解决方法:看他的关键提示fetch first , 通过lz尝试此问题顺利解决
问题三:"![rejected] master -> master (non-fast-forward)
解决方法:还是同样的提示,还是熟悉的味道自己看它的提示,哦,原来要我pull一下,好吧我就pull一下,结果说必须指定pull谁,最后通过尝试终于把东东提交上去了。
修正:"git pull remote master" 改为 "git pull origin master"
git 远程分支创建与推送
本地分支的创建
本地分支的来源为执行git checkout -b <branch name> 的那个分支
例如现在有两个分支,master和b1
master 分支下有一个commit:
commit1: add test1.c
b1分支下有两个commit:
commit2: add test2.c
commit1: add test1.c
如果在master分支下checkout,即:
git checkout master //进入master分支
git checkout -b frommaster //以master为源创建分支frommaster
git log后发现frommaster中有一个提交:
commit1: add test1.c
这说明他是从master分支为源头创建的
如果在b1分支下checkout,即:
git checkout b1 //进入master分支
git checkout -b fromb1 //以b1为源创建分支fromb1
git log后发现fromb1中已经有两个提交:
commit2: add test2.c
commit1: add test1.c
这说明他是从b1分支为源头创建的
远程分支的创建
从远程分支检出的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程
分支有直接联系的本地分支。在跟踪分支里输入git push,Git 会自行推断应该向哪个服
务器的哪个分支推送数据。反过来,在这些分支里运行git pull 会获取所有远程索引,并
把它们的数据都合并到本地分支中来.
$ git remote add origin ssh://git@dev.lemote.com/rt4ls.git
$ git push origin master
这两个操作是等价的,第二个操作的第一行的意思是添加一个标记,让origin指向ssh://git@dev.lemote.com /rt4ls.git,也就是说你操 作origin的时候,实际上就是在操作ssh://git@dev.lemote.com/rt4ls.git。origin在这里完全可以理解为后者 的别名。
需要说明的是,默认情况下这条语句等价于提交本地的master仓库到远程仓库,并作为远程的master分支。
我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
git远程分支的管理和代码提交
首先从远程代码仓库中克隆一份代码, 直接用git clone remote_repository,
假设远程代码仓库有2个分支, master和test分支, 默认是master分支, git clone会克隆远程的所有分支到本地(可以用git branch -r查看远程的所有分支). 然后checkout 到默认的一个分支上, 这里默认的分支是master
clone代码以后, 可以切换到远程的test分支, 使用
git checkout origin/test, 这时候当前git目录处于 'detached HEAD' state, 此时需要用git checkout -b new_branch建一个新的分支(从test分支为起点建), 然后就可以在new_branch分支上修改代码了, 比如我们加一个文件, test,.c, 然后 git add test.c, 然后git commit -a -s 以后就能像test分支提交代码了
git push origin HEAD:refs/for/test (git push origin HEAD:test)
ps:
在new_branch更新upstream上游的代码, 可用git pull origin test
git 本地会有一个master, 对应远程的master, 如果远程有一个alpha1.0分支, 本地也会有一个和远程alpha1.0对应的本地分支, 操作和master一样
关于如何在多个分支直接提交代码
比如, 有2个分支, master和alpha, 在master上提交代码以后, 得到一个本次提交的commit id, 如果想要将本次提交再提交一份到alpha, 可以先git checkout alpha,然后使用git cherry-pick commit-id, 再git push origin alpha即可