所有 *** 作要在git工程下进行 cd 你的项目拖进去(终端进行)
1回退到当前版本(放弃所有修改)(这里只回退到最后一次提交的版本)
git status 回车 (查看状态)
git reset --hard 回车 (放弃当前所有修改及所有待commit)
2针对单个文件的修改回退
git checkout haham 回车
3回到某个版本,并保存该版本以后的修改。(此步骤慎重 *** 作)
git log 回车 (查看提交日志 会退到指定版本) 以下是打印信息
commit cac5f6efe29163081694b6c2f6cf9303436a18f6
Author: AppleDate: Mon May 8 08:28:31 2017 +0800
2017 5 8
git reset cac5f6efe29163081694b6c2f6cf9303436a18f6 回车
4直接回到某个版本,放弃该版本以后的修改。
git log 回车
commit cac5f6efe29163081694b6c2f6cf9303436a18f6
Author: AppleDate: Mon May 8 08:28:31 2017 +0800
2017 5 8
git reset --hard cac5f6efe29163081694b6c2f6cf9303436a18f6 回车
以上是 *** 作本地git版本,以下 *** 作远程仓库的版本(祸从手出, *** 作需谨慎)
1回退远程仓库的版本
先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行:
git push <仓库名> <分支名> -f
2以当前版本为基础,回退指定个commit
首先,确认你当前的版本需要回退多少个版本,然后计算出你要回退的版本数量,执行如下命令
git reset HEAD~X //X代表你要回退的版本数量,是数字!!!!
需要注意的是,如果你是合并过分支,那么背合并分支带过来的commit并不会被计入回退数量中,而是只计算一个,所以如果需要一次回退多个commit,不建议使用这种方法
3回退到和远程版本一样
有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的地方,执行的命令如下
git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名
正所谓天下大事合久必分,分久必合。实际工作中的项目也类似,有的项目越来越大,或者有时候需要把没有前后端分离的项目代码拆分到两个仓库里,就涉及到对已有git项目的迁移 *** 作。
如果只是简单地把代码拆开并不难,可以选择直接下载git项目源代码压缩包,拆分后push到新建的git仓库里就可以了。
但是现实世界往往没有那么简单,比如正在进行的开发分支还没有合并,或者我们想保留提交记录和分支关系。如此种种原因导致无法简单粗暴地把源代码扔到一个新建的git仓库里,还涉及对git记录进行必要的裁剪。
本文就介绍一个好用的工具来进行无损的git仓库迁移。
在实际工作中,我们有一个项目,其项目目录结构很简单,是一个既含有前端代码,也含有服务端代码的仓库,如下所示:
我们希望将前端和服务端代码拆分成两个独立的git仓库,但是因为开发同学还有正在开发的功能分支没有合并,因此我们希望能够同时迁移代码和git提交 历史 以及分支。最终希望得到的结果是:
git repo A: /server/
git repo B: /webapp/
通过查看git文档,首先考虑使用git filter-branch命令来进行迁移。简单来说该命令可以用来 *** 作目录树,同时修改 历史 提交记录。
在我还没来得及完全理解这个命令之前,就看到文档中有这样一段warning
这里提到了filter-branch命令由于有可能产生杂乱的提交 历史 ,以及惨不忍睹的执行效率,所以最终推荐了一个第三方工具git filter-repo。接下来,就该今天的主角登场了。
在github首页上,关于git-filter-repo有这样的描述
接下来我们考虑如何利用这个强大的工具来进行git项目的迁移。
首先,需要定义成功迁移的标准:
查看git-filter-repo的文档可以看到有不少简单的示例,很幸运有一些例子正好可以解决我们的问题。
git-filter-repo的命令选项 (flag) 主要用来 *** 作目录树,根据 *** 作的目录树自动判断需要修改的git提交 历史 信息。
比如我们需要保留webapp目录,删除server目录,那么仅需执行:
这样仓库中的目录结构就会变为:
可以看到,已经没有server文件夹了。
再比如如果我们希望删除DS_Store文件以及其提交 历史 :
当然通常我们需要删除根目录下所有DS_Store文件及其 历史 ,那么可以加上--use-base-name选项,表示匹配文件名,而不是匹配完整路径:
其中 --path 选项后跟需要 *** 作的路径或者文件名,--invert-paths选项字面意思是反向,因此该标记表示的是删除 *** 作。
以上都是删除某些文件或者保留某些文件的 *** 作,其目录结构仍然会保留原始仓库的结构,但我们需要的是仅保留webapp目录下的所有文件,并将其中的内容移动到根目录下。针对这种场景git-filter-repo提供了一个叫做--subdirectory-filter的选项,接下来就进行实际 *** 作。
接下来再看一下老的仓库目录结构
仅保留webapp目录下的内容,并让其成为新的根目录,执行如下命令:
执行结果的目录结构如下所示:
至此,目录结构已经如愿完成,为了确认迁移的 历史 记录也是完整的,执行
如果确认本地仓库的迁移结果正确,再执行命令将当前本地仓库推向迁移的目的仓库即可:
至此我们的git项目迁移就完成了,不仅将代码迁移到新的仓库,也同时将提交 历史 带去了新的仓库。这样一来,对于开发同学来说迁移完全是无痛的,只是切换了新的git地址,而开发过程完全不会中断。
在git项目需要迁移的场景中,日常工作中也许第一反应就是让开发同学们放下手中的工作,全部推向一个指定用于迁移的分支,然后以这个分支为准,下载源代码,再将其推送到新的仓库中。
这种 *** 作方式虽然简单,但是对于开发同学来说,却会造成很多麻烦。
比如新仓库的代码不仅含有自己未开发完成的代码,也含有其他人未完成的代码,很有可能在迁移完成之后项目都跑不起来。
而除此以外,如果新仓库的代码有一个需要很快就上线的功能,或者紧急修复,面对一个百废待兴的新仓库,如何整理出一个可以上线的代码版本,又是一件非常头大的事情。
git-filter-branch可以帮助我们修改目录树和提交 历史 ,但是执行效率和混乱的提交 历史 显得太过于繁琐。
git-filter-repo工具提供了强大的工具集,良好的用户使用界面,以及高效率的处理机制,在目前确实是处理仓库迁移的最优选择。
本文仅仅是讲解了git-filter-repo的一种应用场景,其官方文档上有更多的使用场景,可以根据更多的条件来过滤和 *** 作文件和提交 历史 。
平时我会把所有需要储存的资料都用git进行管理
我需要使用一个命令, 把工作中所有git仓库都提交到自己的阿里云或Dropbox上, 在不同的地方使用它
使用git配合Dropbox的另外一个好处是, 由于 gitignore 忽略了许多公共资源, Dropbox只需要储存很少的内容:
如图, 我的所有项目文件有875GB, 但是Dropbox上只保存着430MB的仓库, 并且还拥有Git的版本管理功能
如果你有和我一样的需求, 这篇文章会帮到你
首先得确保当前有 Nodejs 环境, 安装 merge-sub-gits
思路很简单:
其中添加 -l 参数会打印重命名日志
每次都需要使用 merge-sub-gits 命令包括 git 提交 *** 作很是繁琐, 我们可以在 ~/bash_profile 文件中添加以下内容:
我们平时会有需要把工作文件放入各类网盘中, 方便在公司和家里进行同步, 但是Dropbox\iCloud等网盘都没有给予文件夹忽略和更细腻的Git的文件历史
例如一个React前端项目大概有几百MB, 如果忽略 node_modules 文件夹就只剩下十几MB
我们可以把所有工作和电脑环境相关的资料都放入一个work文件, 使用 merge-sub-gits 把改文件夹的内容同步到网盘中:
我们已经在Dropbox中创建了一个仓库, 并且clone到了本地, 接下来我们拷贝所有需要备份的文件都放入 ~/backup-all 文件夹中, 然后继续下面的 *** 作:
如前文所述, 通过gitignore文件和git的压缩, 把875GB的内容, 变为430MB进行网盘管理, 并且还有Git的版本管理功能
由于Git仓库中保存了许多历史信息, 随着长时间的使用, Git 仓库会缓慢的逐步增大, 由于我们所有子项目都保留着自己的Git历史, 所以如果有一天根Git仓库太冗余了, 我们只需要删除Dropbox的Git,重新提交即可
如果曾经在根git项目中使用过 git commit , 会把子git项目标记为忽略提交
这种情况需要清空git记录:
欢迎 Star: githubcom/ymzuiku/merge-sub-gits
以上就是关于码云管理项目版本控制的终端命令(git)全部的内容,包括:码云管理项目版本控制的终端命令(git)、利用gitrepo无缝迁移git项目、一个Git仓库管理多个Git项目等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)