git基础
参考:http://git.oschina.net/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9
首次创建提交:
cd到项目下,执行以下命令
touch README.md
git init
git add README.md
【git add在提交之前,Git有一个暂存区,可以放入新添加的文件或者加入新的改动 】
git commit -m""
【 提交已经被add进来的改动】
git remote add origin http://git.oschina.net/w136/company
git push -u origin master
【常见报错】
①//提交以后,准备推送的时候,却出了问题
error: 无法推送一些引用到 '[email protected]:joesGit15/learngit'
提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
提示:一个版本库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
//根据提示,我们需要git pull origin master这个命令,来查看冲突内容,有的时候,它会自动合并,有的时候需要手动来解决冲突(按照提示来就可以了)
这里要注意:{进入文档后,Ctrl+X离开,不要Ctrl+Z强制退出}
②如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
【同步到服务器】
同步到服务器前先需要将服务器代码同步到本地
命令: git pull
如果执行失败,就按照提示还原有冲突的文件,然后再次尝试同步。
命令:git checkout -- <有冲突的文件路径>
同步到服务器
命令: git push origin <本地分支名>
如果执行失败,一般是没有将服务器代码同步到本地导致的,先执行上面的git pull命令。
第一次克隆:git clone +网址
拉取:git pull
提交前先commit到本地git库,再拉取远程代码(查看下改动和冲突),之后再push到远程
Git 全局设置:
git config --global user.name "wangwang"
git config --global user.email "[email protected]"
创建 git 仓库:
mkdir clean
cd clean
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://git.oschina.net/w136/clean.git
git push -u origin master
已有项目?
cd existing_git_repo
git remote add origin https://git.oschina.net/w136/clean.git
git push -u origin master
分支:
git checkout -b branch表示创建并切换分支上
A) 创建分支git branch branch
B) 切换分支git checkout branch
A)查看远程分支:git branch -a 命令可以查看所有分支
B)删除远程分支:git branch -r -d xxxxx 删除远程分支
B+)删除远程分支git push origin :serverfix (删除serverfix 分支)--push空到远程分支即为删除
---创建分支:
①(本地分支:git branch -b newbranch //创建并切换到newbranch分支下)
②(远程分支:git push origin newbranch //推送到远程仓库的newbranch分支下,没有就创建)
B)查看本地分支:git branch 查看本地分支
C)删除本地分支:git branch -d xxxxx 删除本地分支
分支合并
首先切换到主分支master:git checkout master
然后执行合并操作:git merge develop
如果有冲突,会提示你,调用git status查看冲突文件,vi进入或者直接编辑
解决冲突,然后调用git add或git rm将解决后的文件暂存。
所有冲突解决后,git commit 提交更改。
git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id
【本地代码库回滚】:
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset --hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)
另外,gerrit中心库是个bare库,将HEAD默认指向了master,因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针.不建议这样搞
参考自:http://m.blog.csdn.net/blog/lihongli528628/45483463
新项目参与:
git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:
1. 找一个干净目录,假设是git_work
2. cd git_work
3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
4. cd project
5. git branch -a,列出所有分支名称如下:
remotes/origin/dev
remotes/origin/release
6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
7. git checkout -b release origin/release,作用参见上一步解释
8. git checkout dev,切换回dev分支,并开始开发。