Git - 学习/实践

1.环境

win10 64位 专业版 

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

2.使用

0. 安装

0.1 Windows下: 省略.

升级: git update-git-for-windows

Git - 学习/实践_第1张图片

 

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

https://blog.csdn.net/qq_28903377/article/details/86148687 

https://mirrors.edge.kernel.org/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

Git - 学习/实践_第2张图片

Git - 学习/实践_第3张图片

 

 

后续补充

...

 

1. 基本使用

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

git  commit -m "备注信息"

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

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

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

2. git 分支操作

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

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

删除远程仓库:

方法有四: //TBD

以下均以项目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 branch -d    //如果尚未是尚未合并的分支,需要用git branch -D    git一般常有提示,请认真阅读英文提示信息,常会有下步思路.

拉取线上分支[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]到本地分支

 

[方式有三]

获取线上分支,但本地没有该分支
参考:
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

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  : 

https://www.cnblogs.com/wangiqngpei557/p/5989292.html

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

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

资源参考:

https://segmentfault.com/a/1190000009866784

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

https://www.cnblogs.com/mengyu/p/6414494.html

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. 忽略某个文件提交,如: idea-workspace-xml  //该文件是记录项目文件在PHPstorm中的轨迹变化.

git忽略的原理:

git设置本地忽略必须保证git的远程仓库分支上没有这个要忽略的文件,如果远程分支上存在这个文件,本地在设置ignore

将不起作用。

 

一般是在.gitignore 文件里面加入  该文件的忽略[如: .idea/ workspace.xml ] 即可.   

                                                                      //Note: .gitignore中支持正则语法, 如忽略 log和zip文件 即 *.log *.zip 即可  20200622

但是如果你在这样做之前已经将此文件提交到了git远程仓库,需要执行以下命令:

git  rm -r --cached 要忽略的文件或者目录 

如: 

git  rm -r --cached .idea  

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206370779--gitignore-and-idea-workspace-xml

 

步骤:

8.1 添加要忽略的目录或者文件到.gitignore文件中, 如下:

 

8.2 执行 git  rm -r --cached .idea  //移除该目录在git版本管理中的记录  ​​​​

 

8.3 添加/提交/拉取/推送到远程仓库即可

git add .

git commit -m '忽略xxxgit'

git push //如果提示需要先拉取, 才能推送 则git pull

8.4 远程仓库查看, 已经没有要忽略的目录或者文件, 如下所示

Git - 学习/实践_第4张图片

 

8.5 验证忽略目录或者文件是否生效, 修改该任意文件内容并且撤回[也可以不撤回, 这里并没有要修改的地方便撤回了].然后查看git 版本状态

git status

可知,已经生效.

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

参见: https://blog.csdn.net/william_n/article/details/103281525

 

10. .gitkeep 是什么? 干什么用?

Git - 学习/实践_第5张图片

参见: https://segmentfault.com/a/1190000018191030?utm_source=tag-newest  //.gitkeep是什么? .gitignore和.gitkeep之间的区别

 

 

 

后续补充

...

3. 问题

TBD

4.参考

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

https://www.php.cn/manual/view/34942.html  //Git中文开发手册

https://www.liaoxuefeng.com/wiki/896043488029600  //廖雪峰的博客-Git教程

https://www.cnblogs.com/wxy0126/p/10615296.html  //Linux下更新Git

http://www.yinxi.net/doc/show.php?DocID=10721 //Git如何修改远程仓库地址

https://blog.csdn.net/william_n/article/details/103281525  //本地仓库与远程仓库关联

 

https://segmentfault.com/a/1190000018191030?utm_source=tag-newest  //.gitkeep是什么? .gitignore和.gitkeep之间的区别

后续补充

...

 

你可能感兴趣的:(工具-TOOLS,git,版本控制)