当前位置: 首页 > news >正文

【git】git知识梳理(一):基本操作远程控制分支管理

(一)基本操作: 

git中所有文件一共有三个状态:已提交,已暂存,已修改。

三个工作区域:

git目录:.git文件夹,每次拷贝其实只拷贝git目录

工作目录:文件和目录都是从git目录中压缩对象数据库中提取出来的。

暂存区:是一个简单的文件,在git目录中,有时叫做索引文件。

工作流程:

1、在工作目录中修改文件

2、对修改后文件进行快照,存入暂存区

3、提交更新,将保存在暂存区的文件快照永久转存到git目录中。

获取帮助的方法:git help <verb> / git <verb> --help / man git-<verb>

工作目录中文件一共有四个状态:未追踪,未修改,已修改,已暂存。

git diff: 看已修改的和暂存的差异(也就是修改的地方)、如果看暂存的和提交的差异,要用diff --cached(--staged)

git commit -a 不经过暂存直接提交。

git rm是从暂存区移除,同时删除文件。如果只想解除追踪,不想删除文件,那么使用git rm --cached aaa.py

git reset是取消对文件的暂存,不修改工作区的内容,只是不暂存了。git reset HEAD file,其原理是回退版本。

git checkout -- file是取消对文件的修改,修改的是工作区的内容!修改成为之前一次add或者commit的状态。非常危险!非常危险!非常危险!git中,只要提交了,就总能回到这个版本!

git tag:标签,比较麻烦。

 (二)远程控制:

git remote -v是查看远程库,git remote add 添加

git fetch pb, 远程库的master分支可以在本地访问了,对应的名字是pb/master,会把没有的数据拉下来,但fetch操作不涉及分支合并。

git pull origin master 如果我的分支跟踪了某个远程仓库的分支,先fetch抓取数据,然后将远端分支自动合并到当前分支。在git clone时默认本地的master分支跟踪远程仓库的master分支。

git push 如果我在推送数据之前已经有其他人推送过数据了,这时就先要fetch下来,然后合并,然后再提交。

git remote show origin 看origin仓库的详细信息。

 (三)git分支:

git鼓励多次使用分支和合并,哪怕一天内分支合并多次

提交时保存一个提交对象,包含一个指向暂存快照的指针,包含作者等附属信息,包含0或多个祖先,每一次commit实际上都继承了上一个parent,

git checkout实际上是更换分支的操作,将head指针指向另一个分支,

分支实际上就是一个指针,总共只有41个字节,40个校验和,1个换行符。

切换分支的时候要注意保持工作区的清洁,也就是先提交!!!

git branch -d asd 删除分支

合并分支方法:

  1、切回到master分支:git checkout master

  2、与之后的分支合并: git merge hotfix

  (如果是直接后代的话,那么是fast-forward,只改变指针的位置)

如果出现冲突:git status可以看到冲突的文件,直接去文件中,可以看到冲突的地方,直接修改之后再add commit就可以了。同时可以通过git mergetool调用可视化工具

可以用git branch --merged查看哪些分支在当前分支的直接上游。

远程分支:一般是 库/名字的状态 origin/master,只可读,不可写。可以推送 比如 git push origin master:master,如果要删除 可以git push origin 【空格】:master

推送操作为 git push (远程仓库名) (本地分支名):(远程分支名)

本地创建新指针 git checkout -b local1 remote1/branch1,这样也就默认跟踪了。

如果不能直接pull的话,一般要fetch下来,然后再merge,解决冲突之后再提交。

分支的衍合(rebase):

  1、切换到test分支,要衍合到master上

  2、git rebase master

  从分支上衍合master,然后提交上去,相当于把冲突合并的事情提前做了,主人想修改,只需要直接向后快进合并就可以了。

比较复杂的情况:git rebase --onto master server client 取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍。

衍合不应该衍合已经提交到公共仓库的对象!

 

转载于:https://www.cnblogs.com/yesuuu/p/5958656.html

相关文章:

  • Java 反射机制模拟hibernate实现持久化
  • JNDI是什么?
  • OI队测题解:
  • JDBC使用总结
  • freeCodeCamp:Convert HTML Entities
  • JDBC中驱动加载的过程分析(上)
  • JavaScript--substring 和 substr 方法手记
  • 颜色选择器插件
  • JDBC中驱动加载的过程分析(下)
  • 条件控制语句
  • hibernate重要接口说明
  • 微信开发个人总结
  • Hibernate中对象的三种状态及相互转化
  • hibernate脏数据检查
  • 版本控制-Git服务器搭建和常用命令使用
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [NodeJS] 关于Buffer
  • AngularJS指令开发(1)——参数详解
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React-redux的原理以及使用
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer之创建数据库快照
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 关于Java中分层中遇到的一些问题
  • 聊一聊前端的监控
  • 系统认识JavaScript正则表达式
  • 你对linux中grep命令知道多少?
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • PostgreSQL之连接数修改
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #etcd#安装时出错
  • #pragma once与条件编译
  • ()、[]、{}、(())、[[]]命令替换
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (42)STM32——LCD显示屏实验笔记
  • (C++17) optional的使用
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)php投票系统 毕业设计 121500
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)基于IDEA的JAVA基础12
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net6Api后台+uniapp导出Excel
  • .NET中GET与SET的用法
  • @NestedConfigurationProperty 注解用法
  • @ResponseBody
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20160807][系统设计的三次迭代]
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [CTF]php is_numeric绕过
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘