git回滚commit并同步远程库

回滚以前很少用,但是今天就出现了这个场景,需要将版本回滚到以前的某个提交。

查看了一下也很简单,按照下面的操作来。

1、先才用命令,将本地的库先回滚。

git reset --hard XXXXX

这个时候,你本地的库已经回滚到你指定的commit,但是这个时候千万不要同步远程库,如果同步那么就悲剧了,又回到了原来的版本,因为远程库的版本还没有回滚。

2、强制回滚远程库

git push -f origin develop

我们都在develop分支做开发,所以提交到develop分支去。

这样,远程库和本地库就同步了,而且都回滚到了你指定的commit那里,nice!

如果是团队协作项目,别人fork了你的代码,那么你就让他在线上先同步远程库,然后他自己的远程库和本地库做同步,把自己本地的需要提交的merge到线上。

最后在提交pullrequest到主库,完美!

用git部署网站代码到生产环境VPS

服务器端git配置

[root@ImmenseGargantuan-VM home]# yum install git -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: repos-lax.psychz.net
 * epel: mirror.hmc.edu
 * extras: mirror.hostduplex.com
 * updates: mirrors.ocf.berkeley.edu
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.8.3.1-6.el7_2.1 will be installed
--> Processing Dependency: perl-Git = 1.8.3.1-6.el7_2.1 for package: git-1.8.3.1-6.el7_2.1.x86_64
--> Processing Dependency: perl(Git) for package: git-1.8.3.1-6.el7_2.1.x86_64
--> Running transaction check
---> Package perl-Git.noarch 0:1.8.3.1-6.el7_2.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
 Package                             Arch                              Version                                         Repository                       Size
=============================================================================================================================================================
Installing:
 git                                 x86_64                            1.8.3.1-6.el7_2.1                               base                            4.4 M
Installing for dependencies:
 perl-Git                            noarch                            1.8.3.1-6.el7_2.1                               base                             53 k

Transaction Summary
=============================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 4.4 M
Installed size: 22 M
Downloading packages:
(1/2): perl-Git-1.8.3.1-6.el7_2.1.noarch.rpm                                                                                          |  53 kB  00:00:00     
(2/2): git-1.8.3.1-6.el7_2.1.x86_64.rpm                                                                                               | 4.4 MB  00:00:01     
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        3.7 MB/s | 4.4 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : git-1.8.3.1-6.el7_2.1.x86_64                                                                                                              1/2 
  Installing : perl-Git-1.8.3.1-6.el7_2.1.noarch                                                                                                         2/2 
  Verifying  : perl-Git-1.8.3.1-6.el7_2.1.noarch                                                                                                         1/2 
  Verifying  : git-1.8.3.1-6.el7_2.1.x86_64                                                                                                              2/2 

Installed:
  git.x86_64 0:1.8.3.1-6.el7_2.1                                                                                                                             

Dependency Installed:
  perl-Git.noarch 0:1.8.3.1-6.el7_2.1                                                                                                                        

Complete!
[root@ImmenseGargantuan-VM home]# mkdir git
[root@ImmenseGargantuan-VM home]# cd git/
[root@ImmenseGargantuan-VM git]# mkdir qead.git
[root@ImmenseGargantuan-VM git]# cd qead.git/
[root@ImmenseGargantuan-VM qead.git]# git init --bare
Initialized empty Git repository in /home/git/qead.git/
[root@ImmenseGargantuan-VM qead.git]# cp hooks/post-update.sample  hooks/post-update
[root@ImmenseGargantuan-VM qead.git]# vi hooks/post-update
[root@ImmenseGargantuan-VM qead.git]# cat hooks/post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
//添加此行:work-tree你的网站目录,git-dir你的git版本控制器目录,意义利用git hooks(钩子)实现实时更新网站文件,~~也有人说使用post-receive钩子(无效)~~
git --work-tree=/home/lee/qead --git-dir=/home/git/qead.git/ checkout -f
exec git update-server-info

本地端设置:netbeans为例

1、新建项目并初始化git仓库

未分类

未分类

未分类

2、首次提交到本地仓库,因为在服务器端建立的是空的仓库

未分类

未分类

3、远程推入到服务器端git仓库,配置远程git仓库的信息

未分类

未分类

未分类

未分类

未分类

4、在netbeans新建test文件,先提交本地,在远程推入

未分类

未分类

未分类

版本控制系统Git的分支管理策略

git的分支管理策略,最流行的莫过于大神nvie提出的策略.

一个中心版本库(我们叫它origin)至少包括两个分支,即“主分支(master)”和“开发分支(develop)”.

要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码

master分支

未分类

develop分支

未分类

团队开发,其中浅蓝色代表master分支,黄色代表develop分支,其他代表团队成员研发需要创建的分支.

未分类

临时分支

Master和Develop。前者用于正式发布,后者用于日常开发。为了满足开发需要.还要有一些临时性分支,用于应对一些特定目的的版本开发。

临时性分支主要有三种:

  • 功能(feature)分支
  • 预发布(release)分支
  • 修补bug(hotfixs)分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

公司项目代码服务器中通常保存项目的Master和Develop,其他分支都在开发成员本地或者其私有远程仓库.

创建一个功能分支

当要开发一个新功能时,从开发分支分出一个功能分支:

$ git checkout -b myfeature develop #创建并切换到myfeature分支

将完成的功能分支合并回开发分支.完成功能可能被合并到开发分支,一定会添加它们至即将发布版本:

git checkout develop #切换到develop分支

git merge --no-ff myfeature #以no-ff方式将其合并到develop分支

git branch -d myfeature #删除临时分支

git push origin develop #将本地develop分支推送到远程develop分支中

–no-ff标签会使合并时总会创建一个新的提交对象(前面文章已经介绍了),即使这个合并本来可以使用快速合并。这避免了丢失功能分支的历史信息和团队共同添加到功能分支的所有提交。对比一下

未分类

在第二种情况下,你不可能从Git提交对象历史中看到实现的功能,你不得不手动地读取所有的日志消息。并且还原所有功能(即一组提交)是非常头疼大;如果使用了–no-ff标记那会变的很容易。

它会创建更大的提交对象,不过受益会更大!

预发布分支

预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-xxx的形式。

流程:

git checkout -b release-1.2 develop #以develop为基础,创建一个预发布分支

git checkout master #切回master分支

git merge --no-ff release-1.2 #以no-ff方式合并到master

git tag -a 1.2 # 对合并生成的新节点,做一个标签


git checkout develop #切换到develop分支

git merge --no-ff release-1.2 #合并到develop分支中

git branch -d release-1.2 #删除预发布分支

修补bug分支

最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用hotfix-xxx的形式。

未分类

流程:

git checkout -b hotfix-0.1 master #以master分支为基础创建hotfix-0.1分支

git checkout master #切回master分支

git merge --no-ff hotfix-0.1 #将其合并到master

git tag -a 0.1.1 #为master分支打标签

git checkout develop #切回develop分支

git merge --no-ff hotfix-0.1# 将其合并到develop

git branch -d hotfix-0.1 #删除临时分支

最终一个开发流程如下所示:

未分类

配置ssh连接多个Git服务器

背景:在工作中,都会有一个工作的Git帐号(公司Gitlab),而空闲时间做的个人东西又想放进Github里面,这时候就需要配置两个帐号和服务器。假设之前已经配置好了工作的帐号,打开git bash:

1、创建个人的SSH key

#新建SSH key:  
$ cd ~/.ssh     # 切换到C:UsersAdministrator.ssh  
ssh-keygen -t rsa -C "[email protected]"  # 新建工作的SSH key  
# 设置名称为id_rsa_hason(名字随意)  
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_hason  

2、添加新密钥到SSH agent:

因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:

ssh-add ~/.ssh/id_rsa_hason  

注意:如果出现Could not open a connection to your authentication agent,参考底部详情

3、修改config文件

若~/.ssh/目录下不存在config文件,则新建一个,内容写上:

# 该配置用于工作  
# Host 服务器别名  
Host 192.168.2.36  
# HostName 服务器ip地址或机器名  
HostName 192.168.2.36  
# User连接服务器的用户名  
User huanghs  
# IdentityFile 密匙文件的具体路径  
IdentityFile C:/Users/P/.ssh/id_rsa  


# 该配置用于个人 github 上  
# Host 服务器别名  
Host github.com  
# HostName 服务器ip地址或机器名  
HostName github.com  
# User连接服务器的用户名  
User hasonHuang  
# IdentityFile 密匙文件的具体路径  
IdentityFile C:/Users/P/.ssh/id_rsa_hason

4、添加新密钥到Github

把~/.ssh/id_rsa_hason.pub的内容添加到Github的SSH keys中

5、测试

使用ssh -T git@Host进行测试,其中Host指上面配置的服务器别名

ssh -T [email protected]  

未分类

6、大功告成!

常见问题:

出现Could not open a connection to your authentication agent

3种解决方法:

  • 先输入ssh-agent bash,然后再输入ssh-add ~/.ssh/id_rsa_hason;

  • 先输入eval $(ssh-agent),然后输入ssh-add ~/.ssh/id_rsa_hason;

  • 使用Git GUI生成密钥,密钥会自动被加进ssh-agent中;

git fatal: 拒绝合并无关的历史的错误解决

问题描述

本地初始化的项目 与 github 版本不一致, 导致无法提交

$ git pull origin master
来自 https://github.com/itaken/python-login-demo
 * branch            master     -> FETCH_HEAD
fatal: 拒绝合并无关的历史

解决方法

在pull 时候, 添加–allow-unrelated-histories参数 即可.

$ git pull origin master --allow-unrelated-histories                    129 ↵
来自 https://github.com/itaken/python-login-demo
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 LICENSE | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE

Git add commit误操作撤销的方法

概述

在平时工作中使用git难免会提交一些错误的文件到git库里,这时候,撤销吧,怕把正确的文件删除了,不撤销重新改又很麻烦,下面,我就从提交的三个阶段,来讲解如何撤销错误的操作。

Git Add了一个错误文件

解决方法

这种情况一般发生在新创建的项目,执行命令:

git add .

命令执行完后发现增加了错误的文件,比如Pycham自动生成的.idea文件夹。比如下图:

未分类

这时候,我想撤销add .idea这个操作,可以这么做:

git reset <file> #撤销指定的文件
git reset #撤销所有的文件

执行完这个命令后,效果如下:

未分类

可以看到.idea这个目录变成了Untracked了。完美解决。 如果你在执行的时候遇到如下的错误:

fatal: Failed to resolve 'HEAD' as a valid ref.

如果遇到这个错误,就说明你的本地git仓库从来没有执行过git commit操作,导致HEAD指针不存在。这时候你可以通过如下的命令撤销操作:

git rm --cached .   #删除文件
git rm -r --cached . #删除文件和目录

如何避免

.gitignore: 把不需要提交的文件增加到这个文件
git add : 增加指定的文件,少用点号

Git Commit了一个错误文件

举例

我现在有个文件的状态如下:

未分类

执行git diff blog-test.py后结果如下:

未分类

可以看到我增加了一行,现在把文件提交到本地仓库:

未分类

可以看到,本地以及没有需要提交的文件了。这时候,我发现,这个修改是错误的,我需要撤销这次commit,我该怎么做了?

只撤销commit操作,保留文件

执行命令如下:

git reset HEAD~1

执行完效果如下:

未分类

可以看到,commit被撤销了,但是修改的部分还保留着。完美解决。不信看git log

未分类

撤销commit操作,删除变化

执行命令如下:

git reset --hard HEAD~1

执行完后效果如下:

未分类

可以看到,我增加的那一行已经没有了,git log中也没有了那次的提交记录:

未分类

完美

如何避免

  • git status: 查看是否有不需要的文件被add进来
  • git diff: 查看文件的变化部分,是否是想提交的

查看更多

Git如何取消最新一次的commit: http://bbs.bugcode.cn/t/7

如何删除分支

好,现在有个很严重的问题,我的分支里代码不用了,现在要删除,怎么整。

分支没有push到远程

删除本地的分支很简单:

git branch -d branch_name

举例截图如下:

未分类

分支已经push到远程

我现在本地和远程都有一个test分支,如下图:

未分类
未分类

执行如下的命令删除本地和远程的test分支:

git push origin --delete test
git checkout master
git branch -d test
#git branch -D test 如果有未提交的文件,用它

执行完效果如下:

未分类
未分类

可以看到都删掉了。

总结

出错不可怕,可怕的是你不知道为什么出错以及如何修复错误。所谓亡羊补牢,为时未晚。

git基本操作命令介绍

1、创建一个新的仓库:(选择一个合适的地方,创建一个空目录)

$mkdir learngit       //learngit是用git新建的一个目录
$cd learngit
$pwd       //pwd命令用于显示当前目录

2、 通过git init命令把这个目录编程git可以管理的仓库:

$git init

3、 用git add把文件添加到仓库: (可以一次add多个文件,可反复使用,添加多个文件,其实质是把文件添加到“工作区”的“暂存区”)

$git add **                 //**是文件名

4、 用git commit告诉git,把文件提交到仓库,其实质是把文件添加到“分支区”:

$git commit -m “**说明内容**”         //-m后面输入的是本次提交的说明        

5、$git status命令可以随时掌握工作区状态

$git status      //告诉你有文件被修改过
$git diff      //可以查看修改内容

6、 $git log 可以告诉我们历史记录,当前的仓库状态 (–pretty=oneline参数可以把历史记录整合到一行)

$git log                    //告诉我们历史记录

7、 HEAD表示当前的版本,上一版本就是HEAD^,上上一个版本就是HEAD^^,上100个版本就是HEAD~100

8、 $git reset –hard HEAD^ //退回到上一个版本,如果–hard 后面是跟commit id,就可回到该id所对应的状态

$git reset --hard HEAD^     

9、查看该文件的内容

$cat **             //**是文件名

10、 查看命令历史

$git reflog             //以便确定要回到未来的哪个版本

11、 撤销修改:

$git checkout -- **                //把**文件在工作区的修改全部撤销

①一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
②一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

12、 删除文件:

$rm **             //删除工作区的文件
$git rm             //删除工作区、暂存区的文件
$git commit             //删除分支的文件

13、 添加远程库:

$git remote add origin git@server-name:path/repo-name.git             //关联一个远程仓库
$git push -u origin master              //第一次推送master分支的所有内容
$git push origin master              //此后,每次本地提交后,只要有必要,使用此命令推送最新修改

14、 从远程库克隆:

$git clone ***           //***是远程仓库地址
$cd *filename*
$ls

15、 git中与分支相关:

$git branch             //查看分支
$git branch              //创建分支
$git checkout              //切换分支
$git checkout -b               //创建+切换分支
$git merge -b               //合并某分支到当前分支
$git branch -d              //删除分支
$git log --graph             //查看分支合并图
$git merge --no-ff -m "说明"               //可以用普通模式合并,合并后的历史有分支,能看出来曾经做过的合并,二fastforward合并看不出来曾经做过的合并

16、 多人协作:

1、首先,可以试图用git push origin branch-name推送自己的修改;
2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3、如果合并有冲突,则解决冲突,并在本地提交;
4、没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
5、如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。

Git 分支管理与冲突解决

Git 分支提供了并行工作的功能。 假设你准备同时学习 git 和 SVN,你可以用两个分支分别来学习,完成之后进行合并,你就掌握了两种工具的使用了。 Git 和 GitHub 的基本操作可以参考我的这篇博客Git 和 GitHub 使用。

1. 分支管理

  • 查看分支 git brance

  • 创建分支 git branch dev # dev 是分支名

  • 切换分支 git checkout dev

  • 创建+切换 git checkout -b dev

未分类

  • 合并分支 git merge dev #分支 dev 合并到 master

  • 删除分支 git branch -d dev #已合并的分支

未分类

  • 强行删除分支 git branch -D dev #分支未合并
  • 查看分支图 git log –graph

未分类

远程仓库的分支

当你从远程仓库克隆时,实际上 Git 自动把本地的 master 分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

未分类

如果要在远程仓库的其他分支 (如 dev 分支)上开发,就必须创建远程 origin/dev 分支到本地:

    git checkout -b dev origin/dev       #创建远程仓库的分支到本地,必须先克隆或关联一个远程分支

本地分支和远程分支的名字最好一致。

未分类

推送成功之后, GitHub 上的 MyRepos 仓库 dev 分支上增加了一个文件。

未分类

2. 分支合并模式

Fast forward 模式

默认模式,在这种模式下, 删除分支后,会丢掉分支信息,看不到合并记录.。并不是任何情况都能用这种模式。

普通模式

加上 --no-ff 参数就是普通模式。在普通模式下, Git 会在 merge 时生成一个新的 commit,这样从分支历史上就可以看出分支信息。

普通模式

未分类

快进模式

未分类

分支图

未分类

在分支图中, 红线是子分支 dev, 绿线是主分支 master. 子主分支分别提交了一次修改, 在将 dev 合并到 master 时发生冲突, 修改冲突文件内容之后再提交。

3. 解决冲突

如果两个分支都分别有了新的提交,Git 无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。必须手动解决冲突后再提交。git status 也可以告诉我们冲突的文件。

内容冲突

两个分支对同一文件的内容进行了修改并分别提交, 如果合并失败, 就必须手动解决冲突, 修改文件的内容之后再进行提交。

未分类

在冲突内容中, Git用<<<<<<>>>>>>标记出不同分支的内容. 文件的内容可以协商修改。

树冲突

一个分支修改了内容, 另个一分支删除了文件, 在试图合并时就会出现树冲突。假设子分支(如 dev)是要合并到主分支 master 的, 处理的方法有:

放弃 dev 的修改:强制删除 dev 分支, 然后提交即可。

放弃 master 的修改—-分下面两种情况:

  1. master 修改了内容, dev 删除了文件: 在 master 分支中删除该文件, 然后提交;
  2. master 删除了文件, dev 修改了内容: 在 master 分支中添加被修改的文件, 然后提交。

master 修改了内容, dev 删除了文件:

未分类

master 删除了文件, dev 修改了内容:

未分类

对于文件的移动(在 Git 仓库目录范围内)和重命名, Git 都可以自动合并。

远程仓库推送冲突

  • 从远程分支抓取最新的提交 git pull

  • 建立本地分支与远程分支的连接 git branch –set-upstream dev origin/dev # dev 为分支名

未分类

如果推送出现冲突, 先将远程分支最新的提交抓取下来, 在本地解决冲突之后再推送。解决冲突的方法与本地冲突完全相同

git代码merge和回滚操作

1. git merge

首先这里说说git merge操作

假如有以下的情况:
我本地和远程服务器各有一个代码仓库,本地的仓库有两个分支:master和dev分支,远程仓库也有两个分支:master和dev。两者一一对应。

假如我在dev分支上添加了很多的内容,并提交到了服务器,现在想在master分支上也加上同样的内容,怎么办呢?

方法有下面两种:

1.1 使用git merge命令

切换到master分支:git checkout master
合并分支:git merge dev

1.2 使用git cherry-pick命令

切换到master分支:git checkout master

git cherry-pick -n commit号 将某一次提交的内容合并过来
git cherry-pick ..dev 将dev分支的整个提交内容都合并过来
git cherry-pick dev

这里合并代码,难免会遇到冲突,对于webstorm用户,可以直接用自带的图形界面处理冲突,我这里推介visual studio code编辑器,微软良心作品。

2. git代码回滚

git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id

2.1 本地代码库回滚

git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除

git reset --hard HEAD~3:将最近3次的提交回滚

对于怎么看commit-id 可以使用命令:

未分类

结果如下:

未分类

画红圈的就是commit-id

2.2 远程代码库回滚

这个是重点要说的内容,过程比本地回滚要复杂

应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布

原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支

操作步骤:

1、git checkout master

2、git pull

3、git branch master_backup //备份一下这个分支当前的情况

4、git reset --hard the_commit_id //把master本地回滚到the_commit_id

5、git push origin :master //删除远程 master

6、git push origin master //用回滚后的本地分支重新建立远程分支

7、git branch -d master_backup //如果前面都成功了,删除这个备份分支

好,主要就这些了。

Git基本概念及工作流介绍

未分类

git介绍

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。

Git基础

Git首先需要掌握的概念

  • 工作区:就是在电脑里能看到的目录
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,版本库里面存了很多东西,其中最重要的就是暂存区(stage或index),Git为我们自动创建的第一个分支master,以及指向master分支的一个指针叫做HEAD
  • 远程库(中央仓库)

结构如下所示:

未分类

工作区内修改的代码提交到远程库需要三步:

  • git add把代码文件添加到暂存区
  • git commit把暂存区的内容提交到当前分支
  • git push把代码推到远程库

Git工作流

掌握工作流能更好的实现团队间通过远程库进行协作。

中心化的工作流

中心化的工作流需要远程库存在一个master分支即可

未分类

A和B同时对项目修改,A和B的本地都有了各自的历史,A先提交代码到远程库,不会发生问题,B再提交的时候就会产生冲突
远程库在这里作为中央仓库代表官方项目,因此它的提交历史应该被视作神圣不可更改的。如果开发者的本地提交和中央仓库分叉,Git会拒绝将他们的修改推送上去,因为这会覆盖官方提交
冲突解决办法:先将代码拉到本地,再执行rebase操作

完整命令

git pull --rebase origin master

合并过程如有冲突,需手动进行修改,可以用git status查看当前工作区状态
合并完成后

git push origin master

Feature分支的工作流

未分类

团队成员在不同的分支上修改不同功能,等待功能模块完成后再合并到主分支。隔离功能开发后,通过pull request合并代码,也可以和其他成员沟通,其他成员对代码查看和提问。

我们项目组中使用这种工作流

GitFlow工作流

GitFlow工作流围绕项目发布定义了一个严格的分支模型,方便管理大型项目。和功能分支相比,这种工作流没有增加任何新的概念或命令。除了功能分支之外,它还为准备发布、维护发布、记录发布分别是用了单独的分支。
它有两个分支来记录项目历史。master分支存储官方发布历史,develop分支整合功能分支,这两个分支不直接交互。
开发分支:如果develop分支的新功能足够发布,可以从develop分支fork一个发布分支,只有和发布相关的任务应该在这个分支进行,如修复bug、生成文档等。完成发布后,发布分支合并会master和develop分支

维护分支,通常有以下约定:

  • 从develop创建
  • 合并进master分支
  • 命名规范release-*

Fork工作流

未分类

Fork工作流与其他工作流不同的是,每个开发者都有一个远程代码库和本地代码库,Fork工作流的主要优点在于贡献可以轻易地整合进项目,而不需要每个人都推送到单一的远程库,开发者将代码推到个人仓库后在告知中央仓库需要合并代码
项目管理员执行合并操作时可以有两步:

直接检查PullRequest中检查代码
将代码拉取到本地仓库然后手动合并

以上对Git使用做了大致总结,欢迎补充。

鲁大师问:Git最常用和最不常用的5个命令分别是什么?
我答:
最常用的

git status
git log --oneline
git commit
git fetch
git merge

最不常用的

git pull
git add
git rebase
git clone
git reflog