git版本控制

  • 一、gitignore文件
    • 屏蔽文件,有一些文件没有必要上传到远程仓库
    • git add.提交的是新文件和被修改的文件,不包括被删除的文件
    • git add -A 提交所有的变化
    • git add -U 提交被修改和被删除的文件,不包括新文件
    • 删除不进工作区,直接进了暂存区, 新建或者修改都会到了工作区
    • 为什么用add.不用add-A
      • 因为删除本身直接进入的是暂存区,所以只需要保证把修改和新增弄到暂存区就行,那就是直接add.就可以
    • 创建一个名为.gitignore的文件,列出要忽略的文件模式,git会根据这些模式规则来判断是否将文件添加到版本控制中
    • 在windows下可以创建文件名为:gitignore,保存之后系统会自动重命名为.gitignore
  • 二、glob模式
    • 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,匹配规则如下:
    • "*":星号匹配零个或多个任意字符
    • []:匹配任何一个列在方括号中的字符,如[ab]匹配a或者匹配b
    • "?":问号匹配一个任意字符
    • [n-m]:匹配所有在这两个字符范围内的字符,如[0-9]表示匹配所有0到9的数字
    • 匹配示例
    • logs/: 忽略当前路径下的logs目录,包含logs下的所有子目录和文件
    • /logs.txt: 忽略根目录下的logs.txt文件
    • *.class: 忽略所有后缀为.class的文件
    • !/classes/a.class:不忽略classes目录下的a.class文件
    • tmp/*.txt: 只忽略tmp目录下的.txt文件
    • **/foo: 可以忽略/foo, a/foo, a/b/foo等
  • 三、gitignore
    • 除了可以在项目中定义gitignore文件外,还可以设置全局的.gitignore文件来管理所有git项目的行为
    • 在gitignore里面写的*.class不在工作区当然提交也不会进入暂存区
  • 四、定义全局的.gitignore
    • 除了可以在项目中定义.gitignore文件之外,还可以这只全局的.gitignore文件来管理所有git项目的行为
    • 但这种方式在不同的开发之之间是不共享的,是属于项目之上git应用级别的行为
    • 可以在任意目录下创建相应的.gitignore文件,然后再使用以下命令配置Git
    • git config --global core.excludesfile ~/.gitignore
  • 五、.gitignore规则不生效
    • .gitignore只能忽略那些原来没有被track(跟踪)的文件,如果文件已经被纳入了版本管理中,修改.ignore是无效的
  • 六、diff命令:查看文件做了什么修改
    • git diff readme.txt 比较了工作区和暂存区的区别,只有修改完还在工作区的才能用diff查看出来 a表示前面的那个变量 b表示后面的变量

    • 1.工作目录vs暂存区:git diff filename 查看文件在工作区和暂存区的区别,如果还没add进暂存区,就可以查看文件自身修改前后的差别 也可以查看和另一个分支的区别

    • 2.暂存区VSgit仓库:git diff --cached filename 表示查看已经add进暂存区但是尚未commit的内容

    • 3.工作区VS仓库:git diff <commit>=head filename查看工作目录同git仓库指定的commit的内容的差异 git diff HEAD test2.txt

    • 4.仓库和仓库 git diff HEAD HEAD^ test2.txt

  • 七、git分支管理
    • git的默认分支就是master,你所做的commit会在master分支上自动一定,在多次提交操作之后,master分支指向最后的那个commit object(提交对象链)
    • 之所以几乎每个仓库都有master分支,是因为git init默认创建
  • 八、分支的创建
    • git branch dev 创建分支
    • git branch 可以查看当前有多少个分支
    • git checkout dev 切换到dev的分支 内容不变只是换了一个分支
    • git checkout - 切换到上一次的分支
    • git checkout -b dev2 创建dev2的分支并切换到dev2这个分支
    • 分支的切换跟文件在哪个区没有关系 ,若文件在工作区,两个分支进行切换,文件仍然在工作区,但是最后提交到分支1上时,在分支2下是没有这个文件的 重点:因为最后接收的是分支,前期只是状态所以都一样,最后提交到哪个分支哪个分支才有该文件,如果想要每个分支都有只能合并分支
  • 九、分支删除
    • 1.不能删除自己所在的分支,,最后的文件都应该在master上面,如果自己创建的分支没有合并到master上面是不能提交的 ,,我们可以切换到master删除一个合并后的或者没有发生变化的分支
    • 2.如果一个分支发生了变化不能删除,没有合并也不能删除,但是想强制删除的话可以git branch -D 分支的名字 如果现在处于当前的分支的话,是不能进行删除的
  • 十、分支合并
    • git merge dev,意思就是将dev合并到master中

    • 当分支合并之后,发现master分支也添加了A.txt这个文件
    • 如果修改的是同一个文件也可以做同样的合并,等合并之后,dev就可以删除了
  • 十一、分支的本质
    • master指向的是提交
    • HEAD指的是当前的分支,当前在哪个分支就指向哪个分支
    • cat .git/HEAD查看当前的分支指向

    • git的分支与svn不同,svn是整体拷贝一份分支,git用的是指针
    • 1.2分支的冲突
      • 在dev分支里面修改文件添加一行提交
      • 在master里面也修改文件添加一行提交
      • 合并的时候就会出现冲突 HEAD是master提交的 我们需要手工合并,修改之后报了master的内容

      • 可以通过图形来查看冲突的提交日志 git log --graph
  • 十二、git stash
    • 目的:git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈的内容 重点:将未完成的任务放在堆栈中什么时候用再什么时候取出来
    • git stash:会把修改的内容做保存
    • git stash list:列出stash保存的所有修改
    • 无论多少个分支都是同一个跟踪状态,在其他分支进行修改后此时换到master分支是不报错误的
    • git stash pop 出栈
  • 十三、分支管理策略
    • 最主要的三个分支:dev master bug
    • stable是记录版本的跟master没有区别
    • release branches:稳定分支
    • feature branches:特殊需求的分支
    • 流程:1.0版本要向2.0版本升级,首先要进行开发分支develop,有特殊功能就上featurebranches,特殊功能开发完了就到develop合并,开发分支没有问题就提交到稳定版本分支上,如果还要继续开发又到开发分支,然后上特殊功能,再合并,再到稳定分支,最后提交到2.0版本, 在开发的过程中想用1.0版本开发个小东西 1.0的bug修改了之后需要提交到开发分支,不让2.0也有着1.0的bug
    • 主分支:master分支我们不做操作,针对stable和develop这两个分支
      • stable分支:用来发布分支,管理多个稳定的版本
      • develop分支:就是日常开发的分支
      • 简单的开发模式:develop分支用来开发功能,开发完成并且测试没有问题之后,则将develop分支的代码合并到stable分支并发布

    • 辅助分支:
    • feature分支:
  • 十四、GitHub注册创建仓库 本地和远程建立管理 推送和拉取
    • 1.再gitee新建仓库
    • 2.终端git config --local -l查看自己是否设置了信息 你的信息一定要add和commit
    • 3.git remote add origin 你的gitee的地址,将本地库上传到远程端,有了远程地址了
    • 4.git pull --rebase origin master 拉取下来了

    • 5.git push -u origin master 推送本地库的文件 到远程
    • 6.git remote show 查看远程仓库 origin指向的就是远程地址

    • 远程分支查看:git branch -a

    • 加上参数V可以查看本地分支和远程分支的最后提

    • 如果要修改文件/新增 最后查看本地和远程的最后提交

  • 十五、git多人协作
    • 项目克隆
      • 1.想再克隆一个再创一个文件夹,里面不做任何的操作
      • 2.复制远程的url,输入命令git clone

      • 3.因为复制的是new的,所以现在是new,应该cd new/,进入到目录中

    • 形成多人协作,就是多克隆
      • 克隆的一个是new 一个是copynew002
      • 在new新建了文件之后,用git remote show origin查看出最后一行copynew002已经和new不同步了,同步的办法就是让copynew002拉取即可

    • 冲突处理
      • 在new中修改提交到远程之后,copynew002没有拉取直接修改同样的文件,
    • 分支推送
      • 1.先在本地创建分支,,然后推送到远程
      • 2.使用git push origin dev,将分支push到远程
      • 3.如果在new中新建了分支,想要同步到copynew002,先拉取下来,看到了这个远程分支,就用git checkout -b develop origin/develop 创建分支,此时也可以修改本地分支的名字,一般会定义和new中一样的名字(复刻远程的dev到达本地)
      • 总结:对于分支的推送的话,想要同步在远程的分支的话,首先,需要-av查到远程和本地,然后再用git checkout -b develop origin/develop的方式建一个跟远程一样的分支实现拉取
    • 远程分支的删除:切换到master删除其他分支,master一般不删除
      • git branch -d feature 只是删除了本地的 这个只是删除了当前目录的分支,以及对应当前目录的远程分支

      • 使用git push origin --delete feature 删除对应的远程分支

      • 如果想要另一个同步删除分支的话需要git remote prune origin但是这个也只是删除远程分支,本地分支还是有的,想要把本地分支也删除的话需要手动删除

  • 十六、tag标签远程管理 就是一个版本的管理
    • 打标签git tag v1 打标签是没有状态的
    • 创建一个带有附注的标签 git tag -a v2 -m 'release version'
    • 删除标签 git tag -d v2
    • 在标签中是没有状态status的,git tag代替了这个功能

    • 标签推送
      • git push --tag 把所有的标签都推送上去 可以下载,下载出来的是代码的压缩包 就是你git里面所有的东西

    • 标签的拉取:git pull

    • 删除远程标签:git push origin 标签名
    • 标签检出:标签记录的是某一时刻的状态 checkout是切换 -b是分支 :git checkout -b <branchname> <tagname>:创建一个我的分支以标签的最终版本为模板复刻出来
  • 十七、git图形界面
    • gitk:会调取出来界面工具 或者是gitgui
    • idea整合git
      • 1.settings中找到git的bin git.exe
      • 2.在写的项目文件中git init
      • 3.然后设置name 和Email 连接到远程仓库的地址 进行拉取
      • 4.在idea中右键找到git 先add 然后commit 最后push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值