基本配置
个人信息
git config user.name
git config user.email
修改
git config --global user.name "YuYan"
git config --global user.email "yuyan@yy.com"
ssh 配置
# 1、确认 ssh key 是否存在
cat ~/.ssh/id_ras.pub
# 2、 不存在,使用以下命令进行创建
ssh-keygen -t rsa -C "邮箱"
# 会在用户目录下生成 .ssh 文件夹
# 文件夹下 id_rsa 为密钥文件 id_rsa.pub 为公钥文件
# 3、测试是否成功
ssh -T git@gitee.com # 这里测试的是 码云
# 4、 在服务器中添加公钥
# 将本地生成的id_rsa.pub内容追加到git服务器git用户的~/.ssh/authorized_keys
创建版本库
git init # 将当前目录作为 git 版本库
连接远程仓库
本地有仓库,服务器没有
mkdir git_demo # 创建文件夹
cd git_demo
git init
git remote add origin 远程仓库地址 # 关联远程仓库
git push -u origin master # 推送本地代码到远程仓库
本地没有仓库,远程有内容
git clone 远程仓库地址 [本地文件夹]
# 本地文件夹: 如果指定本地文件夹,则在当前目录下创建一个远程仓库
忽略特殊文件
1、 在项目中添加一个 .gitignore 文件
2、 在 .gitignore
进行编写需要忽略的文件
3、 将 .gitignore
提交到Git
撤销修改
- 撤销本地修改
git checkout -- 文件
- 撤销 add
git reset HEAD # 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX.java # 就是对某个文件进行撤销了
- 撤销 commit,版本回退
git reset --soft HEAD^
--mixed 不删除工作空间改动代码,撤销commit,并且撤销git add .
--soft 不删除工作空间改动代码,撤销commit,不撤销git add .
--hard 删除工作空间改动代码,撤销commit,撤销git add .
HEAD^ 代表上一次
HEAD~2 代表上两次
commit_id 代表撤销到原来 commit_id 的版本
如果只是commit的注释写错了,可以使用: git commit --amend
冲突
git stash
git pull
git stash pop
<<<<<<<HEAD
本地修改
=============
远程修改
>>>>>>>>>>>>>commit_id
基本命令
# 查看某个文件的提交记录
git log --follow -p routes/admin/contract_operation.js
# 已提交分支形式查看提交记录
git log --graph
# 查看最新的commit
git show
# 查看指定commit id的所有修改
git show commitID
# 查看某次commit中具体某个文件的修改
git show commitID fileName
分支基本命令
# 在本地创建新分支
git branch newbranch
# 创建分支,并切换到dev 分支
git checkout -b dev
# 在本地切换到新分支
git checkout newbranch
# 将新分支推送到远端
git push origin newbranch
# 在本地删除一个分支
git branch -d newbranch
# 在远端删除一个分支
git push origin :newbranch
# 在远端删除一个分支
git push origin --delete newbranch
# 合并分支
# 合并分支,解决完冲突,执行add和commit操作,此时会产生一个额外的commit。
git merge --no-ff
默认: Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward)不过这种情况如果删除分支,则会丢失merge分支信息。
--no-ff 在提交的时候,会创建一个merge的commit信息,然后合并的和master分支
# 合并分支,解决完冲突,执行add和git rebase --continue,不会产生额外的commit。
# 这样master分支上不会有无意义的commit。
git rebase
# 帮助
git branch -help
标签基本命令
git tag 标签 [commit_id] # 打标签
git tag -a v0.1 -m "version 0.1 released" 1094adb
-a 指定标签名
-m 指定说明文字
git tag # 查看标签
git show 标签 # 查看标签信息
团队协作流程
分支解释:
- master分支: 主分支,对项目进行tag或发布版本等操作
- develop分支:开发分支,从master分支上检出。团队成员不能直接更改此分支,而是从此分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。
- release分支:发布分支,从develop分支上检出,该分支用于发布前的测试,可以进行简单的bug修复。如果bug比较复杂,可merge回develop分支后,由其他分支进行修复。release分支测试完毕后,需要同时merge到master和develop分支上
- feature分支:功能分支,从develop分支上检出,团队成员每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等
- fix 分支 : 补丁分支,从develop分支上检出,用作bug修复,bug修复完成需要merge回develop分支,并将其删除,所以该分支为临时分支
- hotfix 分支:热补丁分支,从master分支上检出,进行线上版本的bug修复,修复完成后merge回master分支,并merge回develop分支,merge后也可以将其删除,也属于临时分支
实例:
- develop分支
# 创建develop分支,并推送到远端
git branch develop master # 从master分支上新建develop分支
git checkout develop # 检出develop分支
# 此处可进行功能开发,并add和commit到develop分支
git push origin develop # 推送develop分支到远端的origin/develop
# develop分支上的功能开发完成了,需要进行测试和提交。这里用到了release分支。
git checkout develop # 切换回develop分支
git checkout -b release01 develop # 新建release分支,并切换到该分支
# 做一些测试、bug修复等工作
git add .
git commit -m ''
# 做一些测试、bug修复等工作
# 与 develop 进行合并
git checkout develop # 切换回develop分支
git merge --no-ff release01 # 合并release01分支到develop分支(无冲突)
git push origin develop # 推送develop分支到远端
# 与master 进行合并
git checkout master # 切换回master分支
git merge --no-ff release01 # 合并release01分支到master分支(无冲突)
git tag v0.3 # 新建tag v0.3
git push origin master # 推送master分支代码到远端
git push origin --tags # 推送tag到远端
- hotfix
# 修复紧急bug
git checkout master # 切换回master分支
git checkout -b hotfix master # 新建hotfix分支,并切换到该分支
# 做一些bug修复工作
git add .
git commit -m '注释'
# 做一些bug修复工作
git checkout master # 切换回master分支
git merge --no-ff hotfix # 合并hotfix分支,此时bug已被修复(无冲突)
git tag v0.2 # 新建tag v0.2
git push origin master # 推送master分支代码到远端
git push origin --tags # 推送tag到远端
如果团队成员增加,多人需要开发不同的功能,这里就会用到feature分支。团队中的每个人都从Github克隆一个项目,然后新建自己的feature分支。
git clone xxxx.git
git checkout develop
git checkout -b feature-xx develop # 从develop分支新建并检出feature分支
# 此时“xianhu”做如下操作,并首先第一个提交到了Github远端:
git checkout -b feature-wang develop # 从develop分支新建并检出feature分支
# 这里可以进行一些功能开发,并不断的add和commit
git checkout develop # 切换回develop分支
git pull origin develop # 更新远端代码,看develop分支是否有更新(无更新)
git checkout feature-hu # 切换回feature分支
git rebase develop # 合并develop分支到feature分支,并解决冲突(无冲突)
git checkout develop # 切换回develop分支
git merge --no-ff feature-hu # 合并feature分支到develop分支
git push origin develop # 推送develop分支到远端
对于团队其他成员,比如zz,操作如下,并打算在“xianhu”提交后进行push操作:
git checkout -b feature-zz develop # 从develop分支新建并检出feature分支
# 这里可以进行一些功能开发,并不断的add和commit
git checkout develop # 切换回develop分支
git pull origin develop # 更新远端代码,看develop分支是否有更新(有更新)
git checkout feature-hu # 切换回feature分支
git rebase develop # 合并develop分支到feature分支,并解决冲突(有冲突)
# 这里需要进行冲突解决
git add . # 解决完冲突之后执行add操作
git rebase --continue # 继续刚才的rebase操作
git checkout develop # 切换回develop分支
git merge --no-ff feature-zz # 合并feature分支到develop分支(无冲突)
git push origin develop # 推送develop分支到远端
摘自:https://zhuanlan.zhihu.com/p/23478654