博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用git操作
阅读量:5817 次
发布时间:2019-06-18

本文共 3936 字,大约阅读时间需要 13 分钟。

hot3.png

忽略以前提交过的文件 git rm -r - -cached 文件名/目录名(- - cached 两个横线)

代码回滚到某个commit id,并且新建一个新的分支 git branch branchName commitId git branch thtx fa5d0a83f5d7a6f88a1fabdd0c4232fd6ed4cea9

查看当前tag ~: git tag

打tag -a为tag名字 -m为tag的说明 ~: git tag -a v4.0.3 -m "扫描库更换4.0.3"

把当前的tag们推送到远端 ~: git push origin --tags

删除远端tag(注意origin后面有一个空格) ~: git push origin :refs/tags/v4.0.2

删除远端分支 ~: git push origin :branch-name 冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支

git stash list 查看当前stash

给stash起一个名字 git stash save -a "xxx" 这里的-a参数的意思是把没有加入暂存区的也一并纳入 要不然得先git add . 一把

恢复stash git stash pop stash@{xx} 或者git stash apply stash@{xx} apply和pop的区别是 pop完了之后会删除原来的stash而apply不会

清除所有stash git stash clear

删除指定id的stash git stash drop stash@{id} 如果直接执行git stash drop 默认删除最新那个stash.即stash@{0}

简而言之关于pull和rebase的区别就是显示在git log上 当你push被rejected的时候,通常都是pull再解决冲突再提交 这样的问题在于会生成一个其实没有任何实质操作的commit. 而使用rebase的方式是这样的 首先获取服务器上的最新数据 git fetch origin 然后变基当前的版本 git rebase origin/master 这个时候可能会有冲突,然后你正常的解决冲突 接着通过git add conflict的方式告诉git你已经解决好冲突了 最后执行git rebase --continue 最后直接push

git fetch origin git rebase origin/master

<<<<< HEAD //this is mine

//they are others from server

327fbabffdf8dc68daaf2cf5eb2870ebf33c920d

git fetch origin git rebase origin/master 解决冲突文件conflict.txt git add conflict.txt git rebase --continue

========2017-06-15 08:30======== 关于pull和rebase的问题 假设现在服务器最新的版本号是x 小A和小B都同时拉取了这个版本进行开发,但是现在小A先push到服务器上了, 小B并不知道小A已经push到服务器上了,也就是说现在小B的开发基于的并不是最新的. 所以小B此时如果push的话,是push不上去的,必须先从服务器上拉取最新的代码. 其实就是本地的.git/refs/remotes/origin目录下记录的不是最新的 该目录内容如下: -rw-r--r-- 1 lightman_mac staff 32B Oct 17 2016 HEAD -rw-r--r-- 1 lightman_mac staff 41B Jun 14 17:37 develop -rw-r--r-- 1 lightman_mac staff 41B Jun 9 13:44 master -rw-r--r-- 1 lightman_mac staff 41B Jun 9 13:48 release

对应的每个分支,文件的内容就是改分支上最新的版本号,如 » cat develop

3278b7c7f51802120b2dda1d98da78eea662afa0

那么为了解决问题小B此时应该做的就是先拉去服务器上的最新的代码执行 git fetch origin

这个 origin是什么呢,只不过是远端仓库的一个别名

以下是cat .git/config文件的内容,可见origin是个什么东西 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = :infra/new_customer_android.git fetch = +refs/heads/:refs/remotes/origin/ [branch "master"] remote = origin merge = refs/heads/master [branch "develop"] remote = origin merge = refs/heads/develop [branch "release"] remote = origin merge = refs/heads/release

通过fetch获取了服务器上的最新的代码了以后再执行 git rebase origin/master

根据单词的意思大概也能猜到是什么意思rebase,改变基础. 使得你现在的代码的基础是服务器上最新的代码,而不是你的老代码. 这个可以自己通过git log查看.

然后小B此时就可以push代码了.

至于为什么要fetch然后rebase而不是直接git pull呢? 答案通过git log可以比较直观的看出来. ========2017-06-15 08:30========

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法. 这个文件每一行保存了一个匹配的规则例如:

此为注释 – 将被 Git 忽略

*.a       # 忽略所有 .a 结尾的文件        !lib.a    # 但 lib.a 除外        /TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO        build/    # 忽略 build/ 目录下的所有文件        doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt这样设置了以后 所有的 .pyc 文件都不会添加到版本库中去.另外 git 提供了一个全局的 .gitignore,你可以在你的用户目录下创建 ~/.gitignoreglobal 文件,

以同样的规则来划定哪些文件是不需要版本控制的. 需要执行 git config --global core.excludesfile ~/.gitignoreglobal来使得它生效. 其他的一些过滤条件 * ?:代表任意的一个字符 * *:代表任意数目的字符 * {!ab}:必须不是此类型 * {ab,bb,cx}:代表ab,bb,cx中任一类型即可 * [abc]:代表a,b,c中任一字符即可 * [ ^abc]:代表必须不是a,b,c中任一字符 由于git不会加入空目录,所以下面做法会导致tmp不会存在 tmp/* //忽略tmp文件夹所有文件 改下方法,在tmp下也加一个.gitignore,内容为 * !.gitignore 还有一种情况,就是已经commit了,再加入gitignore是无效的,所以需要删除下缓存 git rm -r --cached ignore_file

注意: .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况. git update-index --assume-unchanged PATH 在PATH处输入要忽略的文件.

另外 git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去.用来保存的是公共的需要排除的文件.而 .git/info/exclude 这里设置的则是你自己本地需要排除的文件. 他不会影响到其他人.也不会提交到版本库中去..gitignore 还有个有意思的小功能, 一个空的 .gitignore 文件 可以当作是一个 placeholder .当你需要为项目创建一个空的 log 目录时, 这就变的很有用. 你可以创建一个 log 目录 在里面放置一个空的 .gitignore 文件.这样当你 clone 这个 repo 的时候 git 会自动的创建好一个空的 log 目录了.

转载于:https://my.oschina.net/tanghaoo/blog/1844058

你可能感兴趣的文章
牛客小白月赛5 A 无关(relationship)
查看>>
在windows系统搭建并运行一个Flutter项目
查看>>
Exchange企业实战技巧(23)用户邮箱数据的导入导出
查看>>
PDF如何旋转页面,PDF旋转页面的操作方法
查看>>
Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上
查看>>
android sqlite 升级为加密
查看>>
使用grep精确匹配一个单词
查看>>
[LeetCode]Same Tree解题报告
查看>>
Exchange2013传输规则配置
查看>>
Python 脚本学习笔记(四) 定制业务质量报表
查看>>
CentOS\Scientific Linux\RHEL网络配置
查看>>
vue根据id删除某一行
查看>>
SPL 总结(阮一峰)
查看>>
bzoj 3993: [SDOI2015]星际战争
查看>>
linux学习-开机权限修改、修改主机名、shell介绍
查看>>
Error: Connection activation failed: Device not managed by NetworkManager解决方法
查看>>
bzoj 1497: [NOI2006]最大获利
查看>>
bzoj 1818: [Cqoi2010]内部白点
查看>>
PHP Security Guide
查看>>
我的友情链接
查看>>