理清代码提交记录:代码管理的 git

栏目: 编程工具 · 发布时间: 5年前

内容简介:变化总是存在。如果有一天,你们代码仓库服务器挂了怎么办?如果有一天,你们需要分离测试与线上代码仓库,那怎么合并代码,手工合并吗?

变化总是存在。

如果有一天,你们代码仓库服务器挂了怎么办?

如果有一天,你们需要分离测试与线上代码仓库,那怎么合并代码,手工合并吗?

如果你们好多个版本,不同的版本对应不同的用户,用户希望他们的代码仓库在他们的服务器而不是你的,怎么办?

千万不要相信那些诸如"你先弄过去,以后代码丢给他们就不管了"的鬼话。如果你信了,你真的新建一个仓库,把代码推到新仓库上了。当新的需求 "把最新版本合并到xxx的代码上",你就懵逼了,这都不是一个源,怎么合并。一行行代码去查吗?

理清代码提交记录:代码管理的 git

多个远程仓库

git可以添加多个远程地址,最最重要的是只要这些远程仓库的代码从相同的commit分出来的,都可以合并。

假设现在有一个本地局域网的仓库,然后我想要添加一个github的远程地址,但是我只希望我release的版本发布到github上。

1) 添加远程地址,指定远程地址名称

git remote add github git://github.com/user/test.git

上述命令添加了一个名为github的远程地址。

使用 git remote  查看远程地址列表.

理清代码提交记录:代码管理的 git

使用 git remote -v  显示远程详情 理清代码提交记录:代码管理的 git

2) 然后将本地仓库推到指定远程即可:

git push 远程名称 远程分支名

对我个人而言,都是新建一个本地分支与远程分支对应。对于本地而言,不同的远程仓库地址都是不同的分支而已。只是在push的时候小心,不要把代码推到不该推的仓库就可以了。

发布的时候只保留一个commit记录

一般代码合并的时候都是使用merge直接合并。但是merge有个问题就是会把详细的提交记录合并过去。对于一些项目发布,在发布版本上其实不需要记录过多的开发细节。只需记录发布日志信息。这个时候就需要merge --squash了。

git merge dev --squash
git commit -m 'relase version2'
git push

上述命令会将dev分支的变更进行合并,但是不会使用dev的commit信息,而是需要再自己手动发布一个commit。

merge之前分支情况:

理清代码提交记录:代码管理的 git

merge之后分支情况:

理清代码提交记录:代码管理的 git

merge--squash之后分支情况:

理清代码提交记录:代码管理的 git

保持分支干净rebase

如果你有强迫症,每次看到各个分支之间的连接网络就抓狂,不想看到下面的场景:

理清代码提交记录:代码管理的 git

那你可能需要使用rebase来合并代码。

关于rebase的介绍可以参考官方文档

git rebase 需要合并的分支名称

以下是rebase前后的一个效果展示

理清代码提交记录:代码管理的 git

使用git rebase 之后:

理清代码提交记录:代码管理的 git

可以看到,git rebase 时候合并后的分支非常干净,看到的提交记录就好像整个开发过程在当前分支串行完成的一样。

rebase修改历史commit

假如在上调试的时候,提交了很多次类似于'fix error'之类的提交信息像下面这样的:

理清代码提交记录:代码管理的 git

怎么把这些信息压缩到一个commit里面呢?这里还是使用到rebase

比如上面的提交记录,我需要合并'fix1','fix2','fix3','fix5'到一个commit 'fix error before online'里面

首先找到fix1前一个记录的hash,然后使用 git rebase -i hash 。命令会把hash之后的commit都列出来,开发人员决定保留那些(pick),删除哪些(squash)。然后按照命令提示重新编写提交信息即可。合并之后的提交记录如下:

理清代码提交记录:代码管理的 git

删除本地commit

对于本地已经commit但是还没有push的情况下

1、保留本地修改:

git reset commit_id 丢弃commit,但是保留文件修改,commit_id是本地的commit

2、完全撤销到修改前状态

git reset --hard commit_id commit_id是修改前最后一个commit_id

以上就是工作中会用的比较多的git操作。当然git还有很多操作可以很好的帮助我们管理代码,还得好好学习。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ASP.NET AJAX in Action

ASP.NET AJAX in Action

Alessandro Gallo、David Barkol、Rama Vavilala / Manning Publications / 2007-9-3 / USD 44.99

Ajax has revolutionized the way users interact with web pages today. Gone are frustrating page refreshes, lost scroll positions and intermittent interaction with a web site. Instead, we have a new gen......一起来看看 《ASP.NET AJAX in Action》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具