Git基础常用功能
一、安装
具体查看 安装Git
windows下git bash坑
不能使用上/下键切换选项
参考:https://blog.csdn.net/csdn_yudong/article/details/86613435
推荐直接使用数字代替,从1开始
二、使用
基础知识
- 工作区(Workspace):就是你在电脑里能看到的项目目录。
- 暂存区(Index / Stage):临时存放更改的地方,使用命令"git add <.|file>"就是把文件加入暂存区。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库(Repository):管理版本的文件,使用"git commit -m 'description'"就是把暂存区的文件提交到版本库。工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
- 远程仓库(Remote):托管代码的服务器。可以简单的认为是你项目组中的一台电脑用于远程数据交换
一张图描述git的文件如何在各个区域之前流转:
origin:远程仓库库默认别名
本地项目初始化/和远程仓库操作
git init,把当前文件夹初始化位git工程
基本操作:添加/提交/查看记录
git commit --amend -m "xxxx",修改上一次的提交信息
git cherry-pick <commitId>,复制一个特定的提交到当前分支,比如master分支的bug修复提交复制到dev分支
git cherry-pick commitId1..commitId100,复制两个commit之间的提交到当前分支,注意:不包括commitId1
仓库分支管理
代码回退
看上面的几个区域的图基本就能明白
"git reset HEAD" 或者"git reset HEAD <file>"命令,暂存区的目录树或文件会被重写,被 master 分支指向的目录树或文件所替换,但是工作区不受影响。
"git rm --cached <file>" 命令,会直接从暂存区删除文件,工作区则不做出改变。
"git checkout ." 或者 "git checkout -- <file>" 命令,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
"git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
- git log a.js查看a.js的更改记录
- git reset fcd2093 a.js 先将暂存区中的该文件回退到历史版本fcd2093
- git checkout -- a.js 暂存区中该文件的历史版本(fcd2093)覆盖工作区中对应的文件,此时(工作区、暂存区的文件a.js是fcd2093版本)。
- git reset --hard aaaa 强制将版本库回退到aaaa,但是远程仓库还是cccc
- git reset cccc 将head移到最新的版本(和远程的head保持一致,实际就是将远程暂存区的内容更新到最新版本cccc,工作区的内容还是保持在aaaa),此时aaaa和cccc的差异便作为本次更改的内容。
- git add / git commit / git push 提交后生成新的版本号dddd
此时git log 看到的最近的提交记录就是:aaaa -> bbbb -> cccc -> dddd
【注】也可以使用git revert cccc 和 git revert bbbb来实现,不过会新增两条回滚记录
保留半成品现场(存储临时现场)
子模块
有时工程太过庞大想要分出子工程单独管理,或者纳入一个子工程到当前工程来,就可能用到子模块功能。
$ git diff --cached subproject_demo
diff --git a/subproject_demo b/subproject_demo
new file mode 160000
index 0000000..aa1eeb0
--- /dev/null
+++ b/subproject_demo
@@ -0,0 +1 @@
+Subproject commit aa1eeb06e67608d7a2af179a7dfd9e594777e90f
chen_@DESKTOP-TJKEMKG MINGW64 /c/works/demo/subproject_demo ((aa1eeb0...))
// 发现没:aa1eeb0就是之前的哪个提交
如果你在项目中改了子模块的代码,准备提交到对应的分支(add和commit已经执行过),使用:
git push origin HEAD:<branch> 这样就把代码提交到对应的分支 ,和 git push origin <localBranch> <remoteBranch>类似
【注】引入私有git工程还可以又其他方式,比如和npm配合:《2018 年了,你还是只会 npm install 吗》查看“私有 git 共享 package”部分
打标签
你可以使用 阿里的AoneFlow模式 使用Git做分支管理,每次发完版本之后需要给当前的master打一个tag,表示发布的一个版本,以便追溯。
git tag,展示所有已经打过的标签
git tag -l 'v1.8.5*',匹配特定的标签查看
git tag -a v1.4 -m "my version 1.4",打附注标签
git tag -a v1.4 932cab, 后期给932cab提交补打上标签
git tag v1.4-lw,打轻量标签,没有标签信息
git tag -d v1.4,删除表情按【谨慎】
git git push origin :refs/tags/v1.4,删除远程v1.4这个标签
git show v1.4,命令可以看到标签信息与对应的提交信息
git push origin v1.4,共享标签,默认情况下,git push
命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上
git push origin --tags,一次性把所有标签push到远程
【注】:更详细查看https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
https和ssh使用
查看链接:https://blog.csdn.net/qq_42108192/article/details/90168968
https模式下添加git账号到项目,push不用每次输入账号密码
打开.git文件的下的 vim .git/config新增以下内容
[user]
name = XXXX05@qq.com
email = XXXX05@qq.com
[credential]
helper=store
三、踩坑
[remote rejected] (hook declined)
完整日志:
$ git push
Enumerating objects: , done.
Counting objects: % (/), done.
Delta compression using up to threads
Compressing objects: % (/), done.
Writing objects: % (/), 1.20 KiB | 1.20 MiB/s, done.
Total (delta ), reused (delta )
remote: git: 'refs/heads/web2.0' is not a git command. See 'git --help'.
remote: error: hook declined to update refs/heads/web2.
To https://e.coding.net/tops/front-www.git
! [remote rejected] web2.0 -> web2.0 (hook declined)
error: failed to push some refs to 'https://e.coding.net/tops/front-www.git'
百度查看帮助,找到类似的问题:https://blog.csdn.net/weixin_39278265/article/details/102248258
本人的问题解决办法
git config --global --unset branch.web2..merge
然后再push就OK
如果觉得本文不错,请点击右下方【推荐】!
Git基础常用功能的更多相关文章
- Git 基础 —— 常用命令
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...
- git基础常用命令
常用命令 git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase ori ...
- git基础常用维护命令
开发模式介绍 master为生产环境分支 trunk为测试环境分支 开发分支由程序员自己取名 比如来一个新项目之后,下面步骤都是在本地操作 1.从本地获取远程master最新代码,保证本地master ...
- python 基础——常用功能片段
1. 元素去重 data = [1,2,3,4,4,5,5,6] res = set(data) 2. 元素去重排序 res = sorted(set(data)) 2. 打印重复的元素 res = ...
- Git基础 —— Github 的使用
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 Github 的利用 Gith ...
- Git 基础 —— 常见使用场景
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 突然插入 Bugifx 工作, ...
- Git 基础 —— 安装 配置 别名 对象
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 Git 安装 Git下载地址 ...
- ###Git 基础图解、分支图解、全面教程、常用命令###
一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...
- Git是什么、Git的功能、为什么versioncontrol用Git、Git的常用命令、Git的优缺点
Git是什么 git是目前世界上最先进的分布式版本控制系统(没有之一). Git是用于 Linux内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版 ...
随机推荐
- 使用 Visual Studio Code 进行远程开发
使用 Visual Studio Code 进行远程开发 在完成了 AT 指令入门的学习之后,接下来就要使用 AT 指令进行 Socket 通信了.问题在于,之前 .NET 的 Socket 编程只需 ...
- react-native-vector-icons 安装、使用
react-native-vector-icons 安装.使用 前言 任何库的安装与使用都离不开官文,按照官方文档一步步操作可以规避大多数问题.不过很多库只有英文文档,想要完全参透需要时间.react ...
- Redis的高并发、持久化、高可用架构设计
就是如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 我这里会选用我之前讲解 ...
- ELK学习实验003:Elasticsearch 集群安装
前面已经介绍了Elasticsearch这个工具,并对单机安装做了简单介绍,现在使用三台机器做一个elasticsearch集群 一 环境准备 1.1 机器准备 1.2 同步时间 [root@node ...
- 后缀自动机&回文自动机学习笔记
在学了一天其实是边学边摆之后我终于大概$get$后缀自动机了,,,就很感动,于是时隔多年我终于决定再写篇学习笔记辽$QwQ$ $umm$和$FFT$学习笔记一样,这是一篇单纯的$gql$的知识总结博, ...
- c++中减字符0的作用(转)
在刷OJ题的时候遇到要读取“2013-3-1”形式的日期然后计算这个日期是该年的第几天, 显然我们读取的是字符串,但是计算第几天却要整型数来计算,这是这个问题的难点,下面是解决这个问题的代码: int ...
- TensorFlow——常见张量操作的API函数
1.张量 张量可以说是TensorFlow的标志,因为整个框架的名称TensorFlow就是张量流的意思,全面的认识一下张量.在TensorFlow程序使用tensor数据结构来代表所有的数据,在计算 ...
- axios中请求传值方式
日常开发中与后端联调,可能需要的数据不同,所传值也有所不同 1.如果是data方式,设置请求头为:并且直接返回data就可以 raw axios.defaults.headers['Content- ...
- enum sizeof typedef分析
1.枚举类型的使用方法 enum是C语言中的一种自定义类型 enum值是可以根据需要自定义的整型值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变 ...
- dfs - 走过的标记取消
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...