Git支持多种协议,默认的git://使用ssh,也可以使用https等其他协议,但ssh协议速度最快。创建一个属于自己的分支,在自己的分支上干活、提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
1、git协作模式
首先,可以推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,即能推送成功!
注:
- 解决冲突:把Git合并失败的文件手动编辑为我们希望的内容,再提交。用git log --graph命令可以看到分支合并图。
- rebase操作:可以把本地未push的分叉提交历史整理成直线,目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
2、git基础指令
m -rf .git //删除项目记录
git init //初始化仓库
git add * //添加文件到暂存区
git commit -m "message" //将暂存区内容提交到当前分支
git status //仓库当前状态
git diff //查看修改内容
git log //修改记录,--pretty=oneline参数表示每条记录单行显示
git reset --hard HEAD^ //回退上一个版本
git reset --hard <版本号> //回到指定某个版本
git reflog //记录每次命令
git diff HEAD -- file //命令可以查看工作区和版本库里面最新版本的区别
git checkout -- file //丢弃工作区的修改
git reset HEAD <file> //撤销暂存区的修改
git rm <file> //用于删除文件
//远程仓库
git remote add origin <url> //绑定远程仓库,关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名
git push -u origin master //将当前分支master推送到远程,第一次推送添加-u参数,将本地master与远程master进行关联
git remote -v //查看远程仓库信息
git remote rm origin //删除本地仓库和远程仓库的关联
//分支管理
git branch dev //创建dev分区
git checkout dev //切换到dev分区
git checkout -b dev //创建(-b)并切换到dev分支
git switch -c dev //创建(-c)并切换到dev分支
git branch //查看当前分支
git merge dev //用于合并指定分支到当前分支
git branch -d dev //删除dev分支
git merge --no-ff -m "merge with no-ff" dev //合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,还需要加上-m参数,把commit描述写进去
git stash //保存工作现场
git stash pop //恢复工作现场
git cherry-pick <commit> //复制提交操作到当前分支
git branch -D <name> //强行删除一个没有合并的分区
git checkout -b branch-name origin/branch-name //在本地创建和远程分支对应的分支
//标签管理
git tag <tagname> //新建一个标签
git tag -a <tagname> -m "message" //指定标签信息
git tag //查看所有标签
git push origin <tagname> //可以推送一个本地标签;
git push origin --tags //可以推送全部未推送过的本地标签;
git tag -d <tagname> //可以删除一个本地标签;
git push origin :refs/tags/<tagname> //可以删除一个远程标签。
// Git设置本地用户名和邮箱
git config --local user.name "xxx"
git config --local user.email "xxx@xx.com"
// 查询
git config user.name
git config user.email
3、git代码提交
// 正常操作 [第一步]
git add . // 代码添加暂存区
git commit -am "xxx" // commit
git pull --rebase // 拉取最新代码
git push origin HEAD:refs/for/${目标分支} // release
// 拉取远程代码可能出现冲突 [第二步]
git add .
git stash // 暂存本地更改
git pull
git stash pop // 拉出本地,解决冲突
git commit -am "xxx"
git push origin HEAD:refs/for/xx
// 提交上去后,你觉得[代码有问题]或者[检视意见修改]需要修改 [第三步]
git add .
git commit --amend // 按esc,输入":q"
git push origin HEAD:refs/for/xx
// 提交上去后,代码有冲突,
先在gerrit上面把代码提交abandon掉
git reset --soft HEAD^
执行第二步
// 切换分支
git checkout -b feature-B16-cart origin/feature-B16-cart
4、如何将某一个分支的部分代码合并到另外一个分支上面
(1)git log
在A分支上通过git log 查看日志;将自己提交的该功能对应的hash值整理出来;
(2)git checkout --track origin/B
如果本地没有B分支,需要先将B分支从远程仓库拉到本地仓库(如果本地有B分支,并且已与远程对应的B分支已关联;无需这一步,直接到下一步)
(3)git checkout B
切换到B分支
(4)git cherry-pick b5dc0dd
在B分支上操作:通过git cherry-pick <commit对应的hash值>将当前hash对应提交的代码合并到B分支上去
注意
每一次合并都可能会产生冲突,如果产生冲突,先解决冲突,然后将代码commit到本地仓库即可;测试无误之后,再将合并后的代码push到远程仓库。切记!
// 单个commit合并
git cherry-pick commitid
// 多个分开的commit一起合并
git cherry-pick commit-id1 commit-id3 commit-id6
// 多个连续的commit合并
git cherry-pick commitid1..commitid8 // 将commitid1到commitid8之间的所有提交合并到B分支上(不包含第一个commitid)