git常用操作记录
之前的多人项目大多使用了SVN作为版本控制,自己只会用eclipse连接GitHub的操作。这次项目采用了git作为版本控制系统,所以学会了很多新操作,这里权当记录,以备后用。
git的一些基本操作可参考http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
简而言之就是:
git fetch
git merge
git merge [分支]
git push
git branch [新分支]
git checkout [file] 不保留此文件的修改,退回上次commit
git checkout . 不保留所有文件的修改,退回上次commit
git checkout [branch] 切换分支
git branch -d [分支] 删除分支
git remote -v 查看remote
git log 查看版本
git log --stat 查看版本详细信息
git reset [版本号,通过log获取] 退回版本到版本
git rebase [branch] 取消自己所做的更改并记录,将目标分支pull过来,然后在此基础上重复自己的更改记录,和git merge最大区别是指针指向。详情参考http://blog.csdn.net/hudashi/article/details/7664631/
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
这里写出若干个常用场景:
0、忽略乱七八糟的文件
用git的时候总有些什么classpath等文件被不小心传上remote(尤其是elipse直接share的时候),别人下载下来也是带着classpath文件的,但是每个人的classpath其实是不一样的,所以每次提交的时候会发现有classpath文件已更新,这东西还不能删了,删了之后别人再用eclipse pull的话会导致工程出现问题。所以干脆自己忽略好了:
a) gitignore文件:这个解决方法在文件没被追踪的时候加入到此文件,则可以忽略此文件,但是已经追踪的再加入就无效了。
b) git rm--cache 文件:这个命令可以在不删除本地文件的条件下删除追踪,但是对于classpath这种删完别人会出错的东西不适用,因为其他人pull的时候会把他本地的classpath删了。。。
c) git update-index --assume-unchanged docMining/.classpath:这种方法相当于在本地忽略了classpath更新,提交和更新时都会忽略这个文件,不想麻烦的每个人都重建一遍工程的话可以在发生冲突的机器执行这个命令。如果想取消忽略使用如下命令:git update-index --no-assume-unchanged docMining/.classpath
1、git解决冲突
使用git mergetool 命令可以打开冲突文件,修改后git commit即可保存为一个合并后的文件。合并后出现的,orig文件删除即可。
2、git subtree
在这里我有一个工作场景如下:
我的一部分个人代码托管在了github上,现在这部分代码要作为一个多人工程的一个依赖工程,个人工程内的许多类和方法多人工程要用到。我又不想这两个版本分别维护,毕竟分别维护的成本很高,但是又要保证两边代码一致并且和两个remote一致,一个是自己搭建的git另一个是github。
这种情况svn比较难以解决,但是git还算方便,可以使用git subtree命令来实现。
首先说一下git subtree的工作过程,我们通过创建一个subtree将个人工程当成一个子工程拷贝到我们多人工程的工作空间内
git subtree add --prefix=子项目相对于多人项目的相对路径 子项目的地址(可以指定本机的.git文件夹,或者远程的.git,如github) 多人工程的某分支 如git subtree add --prefix=segmentation/ ../../eclipse/workspace/segmentation/segmentation/.git master 需要注意的是--prefix一定要指定相对路径,在windows下以/开头或者以D:开头会直接报错,路径不能创建
也就是说我们还是相当于有两份这个工程,也需要保证两个工程的一致性,但是不必手动管理,可以使用git维护两个工程:
git subtree pull --prefix=子项目相对于多人项目的相对路径 子项目的地址(可以指定本机的.git文件夹,或者远程的.git,如github) 多人工程的某分支 如git subtree pull --prefix=segmentation/ ../../eclipse/workspace/segmentation/segmentation/.git master
这样我在个人代码中进行的修改就可以同步到多人工程的master项目下了,当然,是从远端的master同步到本地的master下。
git subtree pull --prefix=子项目相对于多人项目的相对路径 子项目的地址(可以指定本机的.git文件夹,或者远程的.git,如github) 个人工程的某分支 git subtree push --prefix=segmentation/ ../../eclipse/workspace/segmentation/segmentation/.git hotfix 需要注意的是,最好Push到一个不存在的分支,不然有可能会有奇怪的问题,个人工程会进行恢复操作,还得使用git checkout .来保证更新,而push到一个不存在的分支则直接可以git merge hotfix就行
这样就可以在两个工程之间进行相互同步了。
杂谈:
在搜索git子模块的过程中git submodule和repo被反复提及,https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldn't-use-git-submodules/
上述文章阐明了为什么不考虑使用submodule,并且建议在提到的另外几种子模块中挑选一种进行使用,然而在git-scm上的book中,第一版介绍了submodule和subtree,第二版只介绍了submodule,所以究竟哪个更好显得不是那么明确。目前我本人的需求来讲git subtree能实现的非常完善,但是以后需求变化了可能会尝试使用其他命令。
git常用操作记录的更多相关文章
- [skill][git] git 常用操作记录
傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...
- git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明。
git添加远程库的时候有可能出现如下的错误, 怎么解决? 只要两步: 1.先删除 $ git remote rm origin 2.再次执行添加就可以了. ---------------------- ...
- 版本控制工具——Git常用操作(上)
本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...
- Hbase常用操作记录
Hbase常用操作记录 Hbase 创建表 查看表结构 修改表结构 删除表 创建表 语法:create <table>, {NAME => <family>, VERSI ...
- git常用操作 配置用户信息、拉取项目、提交代码、分支操作、版本回退...
git常用操作 配置用户信息.拉取项目.提交代码.分支操作.版本回退... /********git 配置用户信息************/ git config --global user.name ...
- Git常用操作(二)
仓库拉取 git clone XXX 修改仓库链接 $ git config -l # 显示coding列表 $ git config --get remote.origin.url # 返回orig ...
- git -- 项目开发最常用操作记录
官方Git - Book https://git-scm.com/book/zh/v2 ------------------------------git配置以及公钥生成--------------- ...
- 版本控制工具——Git常用操作(下)
本文由云+社区发表 作者:工程师小熊 摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码.使用分支.出现代码冲突的解决办法.紧急保存现场和恢复现场的操作.学会以后已经 ...
- 『GitHub』Git常用命令记录
Commands: git init 把当前目录变成Git可以管理的仓库 随后出现.git目录,这个目录是Git来跟踪管理版本库的git commit -m "change message& ...
随机推荐
- count(1)、count(*)与count(列名)的执行区别
执行效果: 1. count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和coun ...
- Python学习笔记(三)
组合数据类型 5种内置的序列类型:bytearray,bytes,list,str,tuple 元组 元组:固定,有序,索引从0开始,分片,步距语法支持 不能替换或者删除其中的任意数据项,使用list ...
- C#Windows Service程序的创建安装与卸载
C#Windows Service程序的创建安装与卸载 一.开发环境 操作系统:Windows7x64 sp1 专业版 开发环境:Visual studio 2013 编程语言:C# .NET版本: ...
- C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- gitlab服务器IP调整后修改domian或ip
背景 本地搭建的gitlab 服务器,在 /etc/gitlab/gitlab.rb 中 external_url 通常是局域网ip的形式.如下所示 external_url 'http://192. ...
- Excel带条件求和——SUMIF函数
老婆求帮忙,问Excel中怎么跨Sheet带条件求和,就是关于sheet2中筛选出来的数据自动合计在sheet3中 . 比如有个sheet2表中的数据如下: 现在要在sheet3中求合计, 通过分析可 ...
- 1.4 flask request和session
2019-1-4 18:13:57 越努力,越幸运! 还有121天,flask讲完,还有4天,总时长130天 还有13天就讲完了 一月争取看完!!! 永远不要高估自己! 今天学了request和ses ...
- 支持多文件上传,预览,拖拽,基于bootstrap的上传插件fileinput 的ajax异步上传(转载)
首先需要导入一些js和css文件 <link href="__PUBLIC__/CSS/bootstrap.css" rel="stylesheet"&g ...
- 21.react 组件通信
状态属性可以修改 this.setState()中可以写对象,也可以写方法 <script type="text/babel"> class Test extends ...
- ajax方式提交表单数据并判断当前注册用户是否存在
项目的目录结构 源代码: regservlet.java package register; import java.io.IOException; import java.io.PrintWrite ...