Git – 学习/实践 – 以及相关操作

1.环境

win10 64位 专业版 

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

2.使用

1. 文档阅读/查阅 

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

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

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

Note:

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

2. 整理输出

-1. 介绍

Git是什么p>

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 是什么意思ll加不加有什么区别p>

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 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 每次修改的文件列表

高级用法: 查看某人某段时间内的提交记录  //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 是什么什么用p>

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框架[实践]

一切正常~~

后续补充

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  // 官 参考手册

Git教程 – 廖雪峰的官方 站

Pro Git 中文版(第二版)

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

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

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

后续补充

文章知识点与官方知识档案匹配,可进一步学习相关知识Git技能树首页概览2966 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月1日
下一篇 2022年9月1日

相关推荐