1.环境

win10 64位 专业版

默认, 已安装git.[git bash]所有操作均在git bash 中.

2.使用

1. 文档阅读/查阅

https://git-scm.com/docshttps://git-scm.com/docs  //官网参考手册

Guides - [ Git中文开发手册 ] - 在线原生手册 - php中文网  //Git中文开发手册

Git教程 - 廖雪峰的官方网站  //廖雪峰的博客-Git教程

Pro Git 中文版(第二版)   // Pro Git 中文文档

Note:

学习一门技能或者其他, 首先要看下关于它的官方介绍

2. 整理输出

-1. 介绍

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一).

主要用于项目开发, 特别是团队开发. 即便是对于个人开发者.

0. 安装

0.1 Windows下: 省略.

升级: git update-git-for-windows

0.2 inux下:  [centOS 7] --- 主要用于服务器上安装

安装:  yum install -y git

升级git版本:

步骤:

查看git版本,卸载旧版本(如果没有安装git请直接到下一步)

git --version
yum remove git

安装依赖软件

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install  gcc perl-ExtUtils-MakeMaker

编译安装最新的git版本

cd /usr/local/src/

wget -O git.zip https://github.com/git/git/archive/master.zip 
unzip git.zip
cd git-master
make prefix=/usr/local/git all
make prefix=/usr/local/git install

添加到环境变量

echo "export PATH=$PATH:/usr/local/git/bin" >> ~/.bashrc
source ~/.bashrc
git --version

最新的git已经安装over

补充:

linux make prefix=/usr/local all 是什么意思? all加不加有什么区别?

prefix=/usr/local 是把prefix这个变量的赋值传到make脚本,也就是makefile里。
all是makefile中指定的一个编译目标,如果make没有加all,那么默认会执行makefile中的第一个编译目标,这是两者的不同之处。但是,在大多数的makefile中,会将all作为第一个编译目标,如果是这样,那么all加不加都是一样的,因此,真实的执行结果依赖于makefile的写法,是否把all作为第一个编译目标

参考:

上面没有成功, 于是又参考下面重新操作, 结果中途捣突然发现Git就更新到了2.25.0 [见下图], 应该还是之前的操作生效了, 但是缺少了某个步骤. TBD

Centos下升级git版本_桂安俊@KylinOS-CSDN博客_centos 升级git

Index of /pub/software/scm/git/  //git版本库 这里选择git-2.24.1.tar.xz 版本

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.1.tar.xz  //下载2.24.1

另外可参考文档 -- 结合着来

Centos安装Git_CodeLorin的博客-CSDN博客_centos git 安装 //  Centos安装Git 2021-04-25 11:32:39

如何在CentOS 8上安装Git_Linux教程_Linux公社-Linux系统门户网站 // 如何在CentOS 8上安装Git

这里简单的三步 // 20210625 周五 家里

1. 下载源码压缩文件并解压

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.32.0.tar.gz // 最新版本

tar -zxvf git-2.32.0.tar.gz

2. 进入解压后的目录,从源代码安装并构建Git

sudo make prefix=/usr/local all install

3. 安装完毕后,查看git 版本

成功~~

0.3 Mac下安装

这里直接通过installer 傻瓜式安装,原因是不想安装xcode,节省系统资源,将资源留给其他服务

git-osx-installer download | SourceForge.net

没安装之前

安装之后

可以看到已经安装成功

主要是为了安装my-zsh

同时也已经成功~

1. 基本使用

git add 文件名[相对路径]  或者 git add .

git  commit -m "备注信息"

git pull 远程仓库名[默认为origin,可修改]  分支名  // 提交代码之前先要拉取远程仓库相应分支代码 [也不是必须先要pull,可以直接push,如果报了冲突,会提醒需要git pull 然后解决冲突,之后push]

git push 远程仓库名[默认为origin,可修改]  分支名  // 如果有冲突解决完,按照git add/commit  之后push 没有冲突,成功push即可.

Note
git push origin :develop  // 本地的develop分支已经被删除,可以看到冒号前面为空,此命令可以将远程develop分支删除

2. git 分支操作

添加远程仓库

git remote add upstream   //upstream是远程仓库名 默认是origin

[备注: 这里用的是GitLab,或者GitHub均可,上述命令均使用,但若用微软TFS,则需要使用 **** 命令暂时未记住,稍后补上.]

删除远程仓库

方法有四:

以下均以项目git_test为例:
老地址:http://192.168.1.12:9797/john/git_test.git
新地址:http://192.168.100.235:9797/john/git_test.git
远程仓库名称: origin

方法一 通过命令直接修改远程地址
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote set-url origin http://192.168.100.235:9797/john/git_test.git

方法二 通过命令先删除再添加远程仓库
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote rm origin
git remote add origin http://192.168.100.235:9797/john/git_test.git

方法三 直接修改配置文件
进入git_test/.git
vim config 
[core] 
repositoryformatversion = 0 
filemode = true 
logallrefupdates = true 
precomposeunicode = true 
[remote "origin"] 
url = http://192.168.100.235:9797/shimanqiang/assistant.git 
fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
remote = origin 
merge = refs/heads/master

修改 [remote “origin”]下面的url即可

方法四 通过第三方git客户端修改。
以SourceTree为例,点击 仓库 -> 仓库配置 -> 远程仓库 即可管理此项目中配置的所有远程仓库, 而且这个界面最下方还可以点击编辑配置文件,同样可以完成方法三。

查看分支

git branch  [--list]   // 参数可选

创建分支

git branch 分支名

切换分支

git checkout

创建+切换分支

git checkout -b 分支名

合并某分支到当前分支

git merge 被合并的分支 合并到的分支

如果期间有冲突,想终止合并操作

git merge --abort

删除分支

git branch -d   分支名

Note:

如果尚未是尚未合并的分支, 需要用

git branch -D  分支名

git一般常有提示, 请认真阅读英文提示信息, 常会有下步思路.

插入

还原删除的分支: 比如执行git branch -D 之后, 想还原.  // 20201015 科学馆

执行如何命令:

成功还原~~

拉取线上分支[github或者gitlab]到本地分支

[方式有三]

获取线上分支,但本地没有该分支
参考:
https://blog.csdn.net/zhangxiaoyang0/article/details/79286825

方法一:

命令:
git checkout -b 本地分支名x origin/远程分支名x

使用该方式会在本地新建分支x,并自动切换到该本地分支x。

采用此种方法建立的本地分支会和远程分支建立映射关系。

方式二:
命令:

git fetch origin 远程分支名x:本地分支名x

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

采用此种方法建立的本地分支不会和远程分支建立映射关系。

方式三:
跟方式二其实是一样的,但是更加方便,直接切换到相应分支下.
①git fetch 远程仓库名
如: git fetch disney-delta

②git checkout  相应的分支名
如: git checkout DELTA-2928_Retailer_site_db_api

添加远程分支 : git remote add upstream   //upstream是远程仓库名 默认是origin

[备注: 这里用的是GitLab,或者GitHub均可,上述命令均使用,但若用微软TFS,则需要使用 **** 命令暂时未记住,稍后补上.]

查看分支:git branch  [--list]   //参数可选

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d    

// 如果尚未是尚未合并的分支,需要用git branch -D    git一般常有提示,请认真阅读英文提示信息,常会有下步思路.

拉取线上分支[github或者gitlab]到本地分支

Note // 20200818 周二 科学馆

如果分支带有特殊字符,命令行下,需要进行转义,如果利用可视化工具,背后已经做了这样的工作

3. git 版本回退

本地仓库版本回退:

git log [--oneline]  //查看提交记录,并记下要回退的commit id

git reset --hard  commit id  //commit id即上面对应的commit id 如:f634478d2f3d514b5ed77f6b1c8bd5533779fc21

本地仓库回退至远程仓库版本:

git reset --hard  commit id  //commit id 是远程仓库commit id,可以到远程仓库中查看.如 gitlab中8861eee5  本地commit id 与远程仓库commit id 明显长度不同,应为不同的id.

4. git rebase合并多次commit

git log   或者git log --oneline  [推荐使用后者,不过看不到都是谁的提交]

//之后使用wq或者q均可. //离开可视模式.便可以重新输入命令

git rebase -i HEAD~4   //4表示要合并的提交的数量,最新的四个[从下往上数,最新的提交在下面,可以通过提交时间来确认]

git rebase -Idevelop  //develop是基准线  rebase即重新设置基准线,即有参考才行

git add .

git rebase--continue

git log //查看确认

取消git rebase 命令 //即取消rebasing状态

git rebase --abort

详细参考:

使用git rebase合并多次commit  : https://blog.csdn.net/yangcs2009/article/details/47166361

聊下 git rebase -I  :

聊下 git rebase -i - 王清培 - 博客园

5. webhook 的使用[未使用到,暂不记录]

在gitlab 中使用webhook 实现php 自动部署git 代码

资源参考:

https://segmentfault.com/a/1190000009866784

https://segmentfault.com/a/1190000011561808  //比较推荐

Jenkins进阶-Gitlab使用Webhook实现Push代码自动部署(3) - 梦雨情殇 - 博客园

Gitlab上hooks:

https://code.***.io/william_ning/d****/settings/integrations

https://code.***.io/nick_cai/d****/settings/integrations//猜测

6. 查看记录

git log  //查看提交记录

git log --name-status  //查看最近提交修改的文件, 显示状态
git log --name-only 每次修改的文件列表

git show --name-only commit_sha // 可以查看某次commit的修改文件

高级用法: 查看某人某段时间内的提交记录  //20200403

git log  --since="2019-08-01 00:00:00" --until="2019-08-14 00:00:00" --pretty
git log --author="BlessLj" --since="2013-01-31 01:30:00" --until="2013-03-31 01:30:00" --pretty

7. git push 把本地分支推到远程  20191206 周五

1.远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch

git push

2.远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch

git push -u origin/remote_branch

3.远程没有remote_branch分支,本地已经切换到local_branch

git push origin local_branch:remote_branch  //若远程分支没有就会创建该分支 名字可以自行制定, 推荐使用相同的名字

8. 忽略某个文件提交, 即 .gitignore的使用

Git - .gitignore - 学习/实践_william_n的博客-CSDN博客

9. 本地仓库与远程仓库关联

Git 本地仓库与远程仓库关联_william_n的博客-CSDN博客

10. .gitignore的使用

Git - .gitattributes - 学习/实践_william_n的博客-CSDN博客_gitattributes
11. .gitkeep 是什么? 干什么用?

Git - .gitkeep - 学习/实践_william_n的博客-CSDN博客
12. Git - 如何将master/其他分支上修改代码不提交直接移到新建分支

Git - 如何将master/其他分支上修改代码不提交直接移到新建分支_william_n的博客-CSDN博客

13. Git - 强制覆盖本地代码[与git远程仓库保持一致]

Git - 强制覆盖本地代码[与远程仓库保持一致]_william_n的博客-CSDN博客_git更新本地代码和远程仓库一致

14. Git - 换行符自动转换问题 - 学习/实践

Git - 换行符自动转换问题 - 学习/实践_william_n的博客-CSDN博客_git换行符自动转换

15. Git - 执行git pull 一直报错 error: cannot lock ref

Git - 执行git pull 一直报错 error: cannot lock ref_william_n的博客-CSDN博客

16. Git 代码统计

Git 代码统计

17. 设置固定拉取的远程分支

git branch --set-upstream-to=/ current-branch

如:git branch --set-upstream-to=origin/main main

18. 版本控制[Git/SVN] - 如何将修改的文件导出

版本控制[Git/SVN] - 如何将新修改的文件导出

19. 撤消操作

Git - 撤消操作 // git-scm.com/book/zh/v2/Git-基础-撤消操作

20. 修改git文件名大小写问题

git修改文件名大小写_IceEricMoon的博客-CSDN博客

问题背景

在git本地工作区修改文件名大小写(如将test.js改成Test.js)后,使用git status指令提示nothing to commit, working tree clean,也就是说git并没有检测出文件名大小写的修改。

解决方式1

在网上找到的原因是说git是对文件名大小写不敏感的,找到的解决方案是将git配置为大小写敏感的,即使用指令

git config core.ignoreCase false

尝试了一下这个方式,然后使用git status查看状态发现确实又一个untracked file,但是没有delete file,(正常修改文件名称,非大小写修改时是有个untract文件的同时还有个delete file的),此时继续执行git-add-commit之后,会发现git仓库中会同时存在大小写两个文件,此时修改文件内容时两份文件也会同时被修改。使用git ls-tree HEAD 查看对象,会发现大小写两份文件的SHA1值是相同的,也就是两份文件指向同一个Blob对象。此时别人从git上拉代码拉下来的仍然是小写的文件名。

当然可以手动删除仓库中的多余的小写名字的文件,使用的指令是

git rm --cached test.js

然后继续执行git-commit-push提交代码。

解决方式2(推荐)

正确的做法是使用git的指令修改文件名

git mv -f test.js Test.js

这时git就可以识别出文件名的改变了,此时提交到仓库之后会发现仓库上就会只有一个大写的文件。此时从别的地方拉代码也会正确识别出文件名大小写的变化。此方法目前没有发现任何问题。

查看git mv指令的文档,文档上写的是

git-mv - Move or rename a file, a directory, or a symlink

这里还是使用的是方式1,确实有点麻烦

1. 当前项目中,执行git区分大小写文件名设置

git config core.ignoreCase false

//  但是又惹出了其他的事情,比如不能正常切换分支,

解决办法:设置回去先,git config core.ignoreCase true

解决git无法切换分支(The following untracked working tree files would be overwritten by checkout)_蓝狐软件工作室

2. 修改文件名为大写/小写

3. 执行命令git rm --cached xxx

git rm --cached app/controllers/indexController.php
git rm --cached app/controllers/testController.php
git rm --cached core/kernel.php
git rm --cached core/lib/conf.php
git rm --cached core/lib/log.php
git rm --cached core/lib/model.php
git rm --cached core/lib/route.php

截图如下:

提交到GitHub上如下:

GitHub - ningxiaofa/yapf: 从零开始打造自己的PHP框架[实践]

一切正常~~

21. Git - 如何将git修改的文件导出和导入

https://blog.csdn.net/william_n/article/details/129529677

22. git 拉取代码时的配置参数区别?

hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
三者有什么区别?

这三个命令都是用于配置 git pull 命令的行为,但是它们控制 git pull 命令的方式不同,具体区别如下:

  • git config pull.rebase false 表示当执行 git pull 命令时,使用 merge 的方式进行代码合并,即将远程分支的代码合并到本地分支,并生成一个新的合并节点,该节点包含了从两个分支中的所有修改。
  • git config pull.rebase true 表示当执行 git pull 命令时,使用 rebase 的方式进行代码合并,即将本地分支的修改先保存在一个临时区域,然后将本地分支重置到远程分支最新节点,最后将临时区域保存的本地修改应用到新的基础上,这样可以保持提交历史的线性。
  • git config pull.ff only 表示当执行 git pull 命令时,只允许使用 fast-forward 的方式合并,即只有当远程分支的提交历史是本地分支的子集,才能进行合并操作。如果远程分支的提交历史包含了本地分支没有的提交,那么将无法进行合并,需要先将本地分支更新到远程分支的最新提交。

需要注意的是,选择何种方式来执行 git pull 命令,需要考虑具体情况。如果远程分支和本地分支之间的差异很小,那么使用 git pull --ff-only 可以保持提交历史线性,同时也避免了不必要的合并提交。如果远程分支和本地分支之间的差异较大,那么使用 git pull --rebase 可以使提交历史更加简洁,但是也可能会产生冲突,需要谨慎操作。

后续补充

...

3. 问题/补充

1. Windows下升级git bash.直接下载最新版git bash即可 // 20201126 周四 科学馆

然后傻瓜式安装, 但是不能打开旧的git bash窗口.

至于为什么升级, 有时候会收到提示, 旧版git bash会不支持/摒弃一些功能/特性

Git for Windows

2. TBD

4.参考

https://git-scm.com/docshttps://git-scm.com/docs  // 官网参考手册

Guides - [ Git中文开发手册 ] - 在线原生手册 - php中文网

Git教程 - 廖雪峰的官方网站

Pro Git 中文版(第二版)

Linux下更新Git - 你的男孩 - 博客园

Git如何修改远程仓库地址-一佰互联自助建站

Git 本地仓库与远程仓库关联_william_n的博客-CSDN博客

后续补充

...

Git - 学习/实践 - 以及相关操作相关推荐

  1. 大数据-学习实践-1相关Linux

    大数据-学习实践-1相关Linux (大数据系列) 文章目录 大数据-学习实践-1相关Linux 1知识点 2具体内容 2.1安装.使用 2.2高级命令 2.2.1文件 2.2.2日期 2.2.3进程 ...

  2. jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)

    JqGrid相关操作备忘 方法列表 特别推荐:怎样获取某一方某一列的值: [html] view plaincopy var rowdata=jQuery("#list").jqG ...

  3. jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要) from:jpr1990

    JqGrid相关操作备忘 方法列表 1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(js ...

  4. 算法学习-数组的相关操作,简单的数据结构逆天的难度,扮猪吃老虎(持续更新中)

    文章目录 相关知识 Java中Arrays常用api 相关题目 26.删除有序数组中的重复项 80.删除有序数组中的重复项II 66.加一 75.颜色分类 268.丢失的数字 448.找到所有数组中消 ...

  5. git 添加review的相关操作

    git主机上涉及到的操作: 185 git branch186 git pull187 git branch188 git checkout -b wangcheng189 git log190 ca ...

  6. git使用stash存储相关操作

    git stash  将当前修改存储起来 git stash apply 恢复最近一次存储 git stash apply stash@{2} 恢复某一次存储 git stash list 查看存储列 ...

  7. git更新代码及相关操作

    git更新代码 克隆自己仓库的代码 如果已经克隆则增加远程原始主库分支到本地 仓库地址: git remote add raid_master git@xxx.git git remote add x ...

  8. jQuery学习笔记--JqGrid相关操作 方法列表(上)

    1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridi ...

  9. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

最新文章

  1. windows2003系列(之)搭建DHCP服务与中继代理图解
  2. j详细说明ava于clone办法
  3. 经常遇到的10大C语言基础算法(珍藏版源码)
  4. 张小二:做一个幸福的胖子
  5. 12306能删候补订单记录_「实用」官方“捡漏”神器来了!12306铁路候补购票服务正式上线!...
  6. android sd卡不可写,Android检查SD卡是否可读写
  7. C++ queue
  8. windows下mysql解压包安装
  9. CSS中选择器的优先级 ( ※关于相同属性的覆盖问题 )
  10. 阿里云流水线主机离线启动
  11. 基于stm32单片机外文文献_单片机STM32外文文献翻译、中英文翻译
  12. 焦作大学计算机专业分数线,焦作大学历年分数线 2021焦作大学录取分数线
  13. 面向对象版学员管理系统 Python
  14. 炫彩LED电子时钟制作记录
  15. js处理json数组
  16. Java实现递归 斐波那契数列 阶乘
  17. python输出无空格,python 2.7.5+打印列表后面没有空格的逗号
  18. Q2复苏慢,华米科技的“两条腿”还行吗?
  19. FMEA培训-FMEA七步法具体怎么做?
  20. 如何保护企业电子邮件安全,个人电子邮箱怎么注册?

热门文章

  1. windows 8 Surface 会成功吗?
  2. 更好的一个简繁体转换。记录一下
  3. 商标起名禁区,看了少走弯路
  4. 软件测试常用的8种功能测试类型
  5. ATF:Gicv源码文件系列-gicv2.mk
  6. 单细胞分析Scanpy(一):Anndata数据结构
  7. POI Excel实现内容替换
  8. oracle10g lsnrctl,Oracle 10g Lsnrctl没有反映 无法连接数据库
  9. 数据结构6-1:什么是图
  10. 计算机不小心办公软件,电脑表格不小心删除怎么恢复-互盾数据恢复软件