git 常用使用及问题记录

时间:2021-12-28 06:54:25

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 push ssh://git@dev.lemote.com/rt4ls.git master // 把本地仓库提交到远程仓库的master分支中

$ 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即可