GIT WORKFLOW

this readme created on 2019.07.28
by Suarez7988

这是一遍介绍git版本控制流程的中文说明,必须通篇阅读一下

https://github.com/oldratlee/translations/tree/master/git-workflows-and-tutorials

此教程参考公司gitlab仓库写作,从注册、拉取远程仓库、到提交与冲突解决

使用的是“功能分支工作流”模式,详见子章节

https://github.com/oldratlee/translations/blob/master/git-workflows-and-tutorials/workflow-feature-branch.md

1. edit gitconfig like the example as follows:

the git config file is: ~/.gitconfig

[user]
name = suarez
email = suarez7988@XXX.cn
[alias]
log = log --color
st = status
co = checkout
br = branch
up = rebase
ci = commit
dw = diff --color-words
[color]
ui = true
diff = auto
[core]
editor = vim

2. config ssh key

login https://gitlab.xxx.com/

add your ssh key in https://gitlab.xxx..com/profile/keys

you can add many keys in different development environment by yourself

3. copy data repository to local

git clone git@GIT_URL:THIS_PROJECT YOUR_DIRECTORY

if you get "Permission denied (publickey)" problem, See 8.g.

4. create or switch to your own branch

if the project is just created, your should goto 8.i.

cd YOUR_DIRECTORY
git checkout -b YOUR_BRANCH_NAME master

if your branch exists, you can also:

git checkout YOUR_BRANCH_NAME

5. do the work on your own branch

git checkout YOUR_BRANCH_NAME
git status
git add <changed files>
git commit -m "changes reasons"

6. publish your code review(CR)

git checkout master  # 将本地代码切换到本地的master分支
git pull origin master master # 将origin/master分支的改动更新到本地的master分支
git checkout YOUR_BRANCH_NAME # 将本地代码切换到本地的YOUR_BRANCH_NAME分支
git pull origin master YOUR_BRANCH_NAME # 将origin/master的改动更新到本地的YOUR_BRANCH_NAME分支,这步可能会报冲突Conflicts字样,如果冲突,请先解决冲突,然后再继续下面流程,解决冲突的办法见下面8.e
git push -u origin YOUR_BRANCH_NAME # 将本地YOUR_BRANCH_NAME的改动推送到远端origin/YOUR_BRANCH_NAME
git diff master YOUR_BRANCH_NAME > patch[_main change reason].txt # 比较本地YOUR_BRANCH_NAME分支和master分支的不同

if your level is developer, you should create Merge Request on the webpage

  • go to the project webpage
  • if it shows a 'create Merge Request' button click it

    (or choose 'Merge Requests' click button 'New Merge Requests' select project and YOUR_BRANCH_NAME for 'Source branch'

    select the same project and master for 'Target branch' click 'Compare branches and continue')
  • write main change reason for 'Title'
  • select reviewer for 'Assignee'
  • click 'Submit merge request'

the viewer will receive a mail for this merge request.

after he/she review the code, if he/she 'Close merge request', you should goto step 5 and correct your code; if he/she 'Accept merge request', NOTE your branch will merge to master directly.

if your level is master or higher, you can also do the following directly:

git checkout master
git pull
git pull origin YOUR_BRANCH_NAME
git push origin master

7. tag for code publish(only for SA)

git tag -f yyyymmddhh_tag
git push --tags

8. addtional operations

8.a. see all the branch including remote and local

git branch -a

8.b. delete useless branch

delete local branch
git branch -d YOUR_BRANCH_NAME
delete remote branch
git push origin :YOUR_BRANCH_NAME

8.c. you know

git blame <file>

8.d. only add all tracked file

git add -u

8.e. resolve a conflict

use "git status" to see where the problem is

冲突是常见的,不代表你的提交是错误的,当你和另外一个同事同时修改了同一个文件,并且他先于你把这份文件提交到origin/master分支上时,你在git pull origin master YOUR_BRANCH_NAME时才可能冲突,冲突发生时terminal里会显示如下字样:

Auto-merging xxx.py
CONFLICT (content): Merge conflict in xxx.py
Automatic merge failed; fix conflicts and then commit the result.
if there is still problem exsits, do the following operation:
冲突发生后,切忌慌张,切忌逃避,切忌埋怨同事,解决办法也很简单
主要方式就是先编辑冲突的文件,然后git commit提交。
冲突的文件中,<<<<<<与=====中的代码为服务器改动的代码,=====与>>>>>>中的代码为本地改动的代码,
手动编辑冲突的部分,理解同事的修改逻辑,需要你将同事的改动精髓和你的改动相融合,
如果你是第一次处理冲突,请自行上百度搜索git冲突解决方案,来一次愉快的学习。
严禁没解决冲突就直接发merge request!

8.f. merge newest code to local branch

if you just want your local branch merge newest code

git pull origin master

but if you want to update your local master and local branch at the same time, goto 6

8.g. solve "Permission denied (publickey)" problem

first, check your key is add to the profile of your gitlab

then do following command to see if your key located correctly

ssh -vT git@GIT_URL

in most cases, change the key file name to ~/.ssh/id_rsa will solve the problem

but if you have more than one key, you can do the following suggestion

edit the file ~/.ssh/config

Host "GIT_URL"
HostName "GIT_URL"
User "git"
IdentityFile "~/.ssh/YOUR_KEY_FILE"

if the result of "ssh GIT_URL" is:

PTY allocation request failed on channel 0
Welcome to GitLab, hongjun.liu!
Connection to gitlab.xxx.com closed.

thank GOD, you finally succeed

then you can clone the remote repository use following command:

git clone git@GIT_URL:THIS_PROJECT YOUR_DIRECTORY

for more information you can goto https://help.github.com/articles/error-permission-denied-publickey

8.h. revert local commit

if you get "Your branch is ahead of 'origin/master' by n commit", but you do not want to push these changes

git reset --hard HEAD~n

8.i. start a new project

git clone git@GIT_URL:hongjun.liu/PROJECT_NAME.git
cd PROJECT_NAME
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

NOTE that, the very first commit should push at the first time, this step create a remote branch called 'master'.

开发工具之GIT的更多相关文章

  1. IDEA开发工具使用 git 创建项目、拉取分支、合并分支

    转载自:https://blog.csdn.net/qq_39470733/article/details/80366435 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有 ...

  2. 开发工具之Git(二)

    目录 四.Git安装与配置 (一)安装 (二)配置 (三)创建仓库 五.Git基本命令 六.Git分支 上一篇讲了Git的基本原理,建议没看过的同学先看看,然后这次我们来讲Git的具体操作和指令. 四 ...

  3. 开发工具之Git(一)

    目录 一.什么是Git 二.Git基本原理 三.Git用户交互 一.什么是Git 答:Git是一个分布式版本控制软件.另外提一句,它的开发者就是大名鼎鼎的Linux之父Linus. 版本控制,顾名思义 ...

  4. Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统

    Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...

  5. 如何使用IDEA开发工具中右键中的Git图形化工具

    首先,你的项目一定是git服务器上面down下来的,下面来演示如何使用IntelliJ IDEA 开发中在鼠标右键中提供的一个非常方便的图形化Git管理工具: 这里使用的IDEA开发工具的版本是 In ...

  6. 开发工具--浅谈Git

    工具|浅谈Git Git这个工具,是我一直想写文章,终于我实现了我的想法.在我开始写之前,发表一下自己的看法,git只是一个工具,既然已经认定是一个工具,那么一定具备工具这类的共同特征,请用面向对象的 ...

  7. Chrome 开发工具之Console

    前段时间看git的相关,记的笔记也大致写到了博客上,还有些因为运用不熟,或者还有一些疑惑点,暂时也不做过多纠缠,之后在实践中多运用得出结论再整理分享吧. 工欲善其事,必先利其器.要想做好前端的工作,也 ...

  8. Android 常用开发工具以及Mac常用软件

    Android 常用的开发工具记录.其中包括AndroidStudio(IDEA)插件.Mac 上好用的软件以及国内知名Android开发者博客等. Android Studio 插件 codota ...

  9. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

随机推荐

  1. 谷歌网页性能分析工具 Lighthouse 的安装及使用

    github地址:https://github.com/GoogleChrome/lighthouse 一.如果可以翻墙的话可以从 chrome 扩展插件里直接安装. 二.下面是另一种使用方法:基于 ...

  2. JS遍历表格获取每行数据及每个单元格数据

    /** * 遍历表格获取每行数据及每个单元格数据 * @param tableID 表格ID */ function GetTable(tableID) { var milasUrl = {};//新 ...

  3. IP协议首部结构介绍

    当提交给数据链路层进行传送时,一个 I P分片或一个很小的无需分片的 I P数据报称为分组.数据链路层在分组前面加上它自己的首部,并发送得到的帧.I P只考虑它自己加上的 I P首部,对报文本身既不检 ...

  4. Java锁--ReentrantLock

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496101.html ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又 ...

  5. 打包完的rcp产品svn不储存密码问题

    原因是缺少org.eclipse.core.runtime.compatibility.auth 这个依赖,需要添加到依赖中去 因为使用SVNKit的时候会去调eclipse这个api 详情见: ht ...

  6. Codeforces Round #584 B. Koala and Lights

    链接: https://codeforces.com/contest/1209/problem/B 题意: It is a holiday season, and Koala is decoratin ...

  7. 1、课程简介-Spring 注解驱动开发

    1.课程简介-Spring 注解驱动开发

  8. JQuery实践--Why JQuery

    给页面增加动态功能的工作流模式:选择一个元素或一组元素,然后以某种方式对其进行操作. 利用原始的JavaScript完成这些任务中的任何一个,都会需要数十行代码,JQuery让这些常见的任务变得简单 ...

  9. JAVA类的无参方法

    Java注释:                //:单行注释                /**/:多行注释                /**    */:JavaDoc注释    方法:   ...

  10. luogu 5354 [Ynoi2017]由乃的OJ LCT+位运算

    如果做过起床困难综合征的话应该很快就能有思路,没做过那道题的话还真是挺费劲的. 我们不知道要带入的值是什么,但是我们可以知道假设带入值得当前位为 $1$ 时这一位在经过位运算后是否为 $1$. 至于这 ...