![查看源图像](https://i-blog.csdnimg.cn/blog_migrate/42f4aa2edb95550e44f976af0f150ebc.jpeg) 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 ![](https://i-blog.csdnimg.cn/blog_migrate/b98959c3dbc23cbdefb4f6d03367597f.png) 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
![](https://i-blog.csdnimg.cn/blog_migrate/99250c41d3f42bade74c60f74923e55c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b8cde30cc567d8e313b4427919832f34.png)
另外可参考文档 -- 结合着来
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
![](https://i-blog.csdnimg.cn/blog_migrate/23c20c38ba5e6fd20ee6965cb014b84e.png)
2. 进入解压后的目录,从源代码安装并构建Git
sudo make prefix=/usr/local all install
3. 安装完毕后,查看git 版本
![](https://i-blog.csdnimg.cn/blog_migrate/8eba8fc4084ce609971c808064937aac.png)
成功~~
0.3 Mac下安装 这里直接通过installer 傻瓜式安装,原因是不想安装xcode,节省系统资源,将资源留给其他服务 git-osx-installer download | SourceForge.net ![](https://i-blog.csdnimg.cn/blog_migrate/c94837dd782ade170227398906cba760.png) ![](https://i-blog.csdnimg.cn/blog_migrate/d676e8eb97ad61a769352740c39f92a4.png) 没安装之前 ![](https://i-blog.csdnimg.cn/blog_migrate/592fc22c82ea0074afc06db2645bdd91.png) 安装之后 ![](https://i-blog.csdnimg.cn/blog_migrate/e501f2e90b983e4ac87adbeb2e91b5d3.png) 可以看到已经安装成功 主要是为了安装my-zsh ![](https://i-blog.csdnimg.cn/blog_migrate/61e8898b3f35bc941c0bf637ab2283e9.png) 同时也已经成功~ ![](https://i-blog.csdnimg.cn/blog_migrate/ffc8d0b81dd46a9e9aec34dd8eda8971.png) ![](https://i-blog.csdnimg.cn/blog_migrate/99c43c95c06da8b536b306e75b383901.png) 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
![](https://i-blog.csdnimg.cn/blog_migrate/d7f90320fb9b69e1a6340b94c32a8db3.png)
删除分支
git branch -d 分支名
Note: 如果尚未是尚未合并的分支, 需要用
git branch -D 分支名
git一般常有提示, 请认真阅读英文提示信息, 常会有下步思路. 插入
还原删除的分支: 比如执行git branch -D 之后, 想还原. // 20201015 科学馆
执行如何命令:
![](https://i-blog.csdnimg.cn/blog_migrate/d6739ed0c9c1f6f1a5f1e37e86653072.png) ![](https://i-blog.csdnimg.cn/blog_migrate/d8a0862fbe9e1f0b2cc68e8d0025aa9c.png) ![](https://i-blog.csdnimg.cn/blog_migrate/b2fc28a437d5b42b0638d7bdc169a17e.png) 成功还原~~ 拉取线上分支[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 周二 科学馆
如果分支带有特殊字符,命令行下,需要进行转义,如果利用可视化工具,背后已经做了这样的工作
![](https://i-blog.csdnimg.cn/blog_migrate/ffb69d21f62e2d104298cc28925f0c91.png) 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
截图如下: ![](https://i-blog.csdnimg.cn/blog_migrate/2eb1c384eec25b80e5f0f5402503dfe8.png) 提交到GitHub上如下: GitHub - ningxiaofa/yapf: 从零开始打造自己的PHP框架[实践] ![](https://i-blog.csdnimg.cn/blog_migrate/56e964b8f5b4848c2e94d06b9db05e60.png) 一切正常~~ 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 可以使提交历史更加简洁,但是也可能会产生冲突,需要谨慎操作。
23. 修改commit信息 // 前提是只是本地commit 还未推送
git commit --amend
![](https://i-blog.csdnimg.cn/blog_migrate/9d257441d2943ee1b92df528195ae61d.png) ![](https://i-blog.csdnimg.cn/blog_migrate/3ae0167981a5875463ad5036441d9280.png) 后续补充 ... |