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& ...
随机推荐
- Oracle字段根据逗号分割查询数据
需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询. 数据是这样的: 查询的sql如下: select * from ( select gu ...
- String 类型的值能够被反射改变从而引发的意外事件
今天刷技术文章,遇到了一个问题,用 Java 反射机制去修改 String 变量的值,出于深入研究,就发现了一个问题,即,用初始值比较修改后的值,用 == or .equals() 方法,出现了相等的 ...
- python数据分析及展示(二)
一.Matplotlib库入门 1. Matplotlib库的介绍 http://matplotlib.org/gallery.html可查看Matplotlib库的效果 Matplotlib库由各种 ...
- 死锁的原因及解决办法RLock递归锁
死锁 说到死锁,可以讲一个科学家吃面的问题: 有几个科学家在一张桌子旁,桌子上只有一把筷子和一碗面,我们将面和筷子都加锁.这是可能会导致一个科学家抢到面,另一个科学家抢到筷子,这是就全部阻塞了,这就是 ...
- 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
参考;https://blog.csdn.net/qq_37746973/article/details/78402812?utm_source=blogxgwz1 https://blog.csdn ...
- python 第三方扩展库的安装
主要就是采用 easy_install 和pip安装,一定要把这两个东西安装好.http://peak.telecommunity.com/DevCenter/EasyInstall下载ez_setu ...
- jquery parents() next() prev() 找父级别标签 找同级别标签
html结构 解决方法: jquery parents() 找父级别标签 next() 同级别向下找 prev() 同级别想上找 我这里找的是一个,下面有n个的方法 $(document).read ...
- python全栈开发 * 15知识点汇总 * 180621
#15 函数二 与 匿名函数1.dir() # 查看内置属性,将对象所有方法名放在另一个列表中.dic={"水果":"香蕉",'蔬菜':"土豆&quo ...
- django-CRM-项目部署
流程 rbac组件的应用 1:拷贝rbac组件到新的项目中,执行注册 2:数据库迁移 先删除rbac下migrations下除了init之外的所有文件 修改用户表 class User(models. ...
- SpringBoot介绍
SpringBoot作用:对框架整合做了简化,和分布式集成.pom.xml中的spring-parent中有很多已经集成好的东西,拿来直接用 SpringBoot核心功能: 1.独立运行的Spring ...