一:git的大致介绍
git即分布式版本控制软件,它与SVN(集中式版本控制软件)不同,具体的区别请自行查阅,git的安装请参阅官网:https://git-scm.com/,下面主要介绍git的使用。
二:git基础操作
(1):git在进行版本管理时首先进入要管理文件所在的位置,如下图所示,在所有管理的文件夹下存在4个文件。使用git bash软件(安装了git后单击鼠标右键即可显示,如果没有也可在主菜单栏查找)进入文件夹Do_some_experience,(不知什么原因,感觉只能依次进入,按理说不应如此,求懂的大佬指教)。
(2):首先用git init 命令初始化,以便使用git管理文件,按照上面所述在该文件夹下会生成一个.git文件,它包含的是一些版本管理的具体信息。(要想看见.git文件,需要勾选显示隐藏文件。)
(3):使用git status去查看当前的git管理状态,上面的两个绿色文件是已经被管理的文件(我已经操作过这两个文件),红色的文件PPTX.pptx为新增的文件,还未被管理。(可能文件夹不在它的管理范畴,它并未显示名为“文件夹”的这个文件),我们在源文件夹中新增一个word,我们再次执行git status命令可以看到未管理的红色文件多了一个word.doc。
(4):要管理那个文件只需执行git add +" 所需要管理的文件"即可。如下图所示我们对word.doc进行管理,在此打印git的管理状态后,该文件已经显示为绿色的已被管理状态。
当然,如果你想一次性管理所有还未被管理的文件则只需git add .,在此"."表示剩下的所有未被管理的文件
(5):使用git commit -m +"描述性信息"用来生成新的版本,再次使用git status显示没有文件需要去commit,因为所有的文件已经生成新的本版"V1"了(第一次使用git,在执行git commit -m “XX"时,会报错,系统不知道是谁上传的新版本,需要按照报错提示配置个人信息(邮箱与用户名))。
(6):原来的word为空,现在我们向其中添加"你好!”,再次打印git管理状态会发现原来的
word.doc由原来的绿色变为红色,它表示你修改后的word文件未被管理,按照上面的步骤,我们将其生成第二个版本。并可以使用git log命令查看版本信息。
(7):回滚,经过上面的操作后,现在是"第二个修改版本"版本,如果我们想回到原来的"v1"版本,则只需要git reset --hard +版本号即可。“第二个修改版本"版本中的word.doc中有内容"你好!”,若回到"v1"版本,则内容为空,如下所示。
(8):经过第(7)步后,若想再次回到"第二个修改版本"版本,需使用git reflog代替git log查看版本记录,否则回滚后不能查看到"第二个修改版本"版本,同时使用git reset --hard +"第二个修改版本"的版本号(版本前面的一串黄色数子)即可再回到"第二个修改版本"版本。从word.doc中可以看出"你好!"又回来了。
git的大致工作情况
*命令总结
1:进入要管理的文件目录
2:git init 初始化,即让git帮我们管理当前文件夹
3:git status 检测当前目录下文件的状态
4:个人信息配置:用户名、邮箱(一次即可)
git config --global user.email “you@example.com”
git config --global user.name “Your Name”
5:三种状态的变化
(1)红色:新增的文件/修改了的原文件 -》git add 文件名 (将文件由本地工作区推到缓存区,此时该文件已被管理 )
(2)绿色:git已经管理起来的文件 -》git commit -m “描述信息” (将文件由缓存区推到版本库)
(3) 生成版本
6:查看版本记录:git log
7:回滚之前的内容:git reset --hard +版本号
8:回滚之后的内容:
(1)git reflog 查看所有的版本记录,此时不能用git log
(2)git reset --hard 版本号
二:分支
(在此不做配图,大家可以自己试一下)
1:查看当前分支:git branch
2:新建分支:git branch + “分支名”
3:切换分支:git checkout + “分支名”
4:合并分支:一般会先切换到主分支,然后将需要切换的分支与主分支进行合并,git merge + “需要合并进主分支的分支”,(有时需要手动解决冲突)。
5:删除分支:git branch -d + “需删除的分支名”
三:git与github工程互传
先在github上建立仓库,如下所示,建立名为"git_test"的仓库。
进入需要git管理的工程,如:
将需要管理的所有内容推送到缓冲区
将所有内容由缓冲区推送到终端
将需要管理的工程推送到github仓库
上面之推送了master分支,若还需要推送其他分支,只需要:git push -u origin 其他分支名。
使用git clone +仓库地址拉下来的工程默认会拉下来所有分支,但使用git branch查看分支时你只会看到主分支。使用git checkout +分支名仍可自由切换。
四:两地开发
1:在家上传代码
A:给远程仓库起别名
git remote add origin 远程仓库地址
B:向远程推送代码
git push -u origin 分支 (-u表示默认,下次提交时默认提交到origin的所规定的分支下,可以省略)
2:在公司第一次获取代码
A:克隆远程仓库代码
git clone 远程仓库地址(内部已实现 git remote add origin 远程仓库地址,再次提交时不需要再进行起别名操作)
B:切换到开发分支
git checkout 分支
C:把master分支合并到开发分支(仅一次)
git merge master
D:修改代码
E:提交代码
git add .
git commit -m “xx”
git push origin 分支
3:回家继续写代码
A:切换到开发分支进行开发
git commit 分支
B:拉代码
git pull origin 分支,等价于git fetch origin 分支 与git merge origin/分支
C:继续开发
D:提交代码
git add .
git commit -m “xx”
git push origin 分支
4:开发完毕要上线(主要是将所开发的内容合并到主分支并将其推送到终端服务器)
git checkout master
git merge 需要与主分支合并的分支
git push origin master
下面展示其在新建的分支dev的a.py中进行开发,并将其提交到仓库的dev分支中的内容。(个人信息已打码)
五:rebase(使git提交记录更加简洁)
1:将多个提交记录整合为一个提交记录(避免太多提交记录给人造成混淆)
注:合并记录时不要合并已经push到仓库的记录,否则会造成已push的内容找不到提交记录,对后续操作造成不必要的麻烦
如上两图所示,在rebase_test1文件夹中有4条提交记录现需合并其中的三条
如上所示:使用git rebase -i HEAD~n,表示以最新的提交为基准,合并最近提交的n次记录,上面表示以v4为基准合并v2、v3、v4。回车后会出现下面的内容,根据红色提示改即可。
保存后会出现下面内容:
经过上面操作后即提交记录修改完成。git log打印记录可确认v2、v3、v4已合并,目前只有v1和v2&v3&v4两个提交记录。
2:如下图所示,如果想将c3并入主干中,可以使用rebase,有点类似于git merge。(个人感觉没什么用,在此不做介绍,类似的方法可看:https://www.jianshu.com/p/4a8f4af4e803),不过下面两条命令可以记一下。
A:git log --graph 以图的形式显示提交记录情况。
B:git log --graph --pretty=format:"%h %s"在图中只显示版本号和提交记录,是上面命令的简略模式。
3:解决冲突(与git merge类似)
A:下面三图的废话有点多,主要是使分支上的1.py的内容与master中1.py中的内容不一致,以便在使用git rebase时发生冲突。
B:经过上述步骤后,使用git rebase master命令将master的内容与dev分支上的合并,由于1.py的内容不同,会产生如下错误。vim 打开1.py修改内容后,使用git add .推送到缓冲区(个人感觉需要补充提交到终端),再根据冲突解决提示使用git rebase --continue命令即可完成。
六:快速解决冲突-beyond compare软件(pycharm有自带解决冲突的相关模块)
1:安装
2:在git中配置(–local表示只在在文件下有效)
git config --local merge.tool bc ##bc为在此给该工具起的名字
git config --local mergetool.path “该软件的安装路径” #打开该软件后如下所示让其显示安装路径
git config --local mergetool.keepBackup false #false表示不保留原文件
3:应用beyond compare解决冲突
遇到冲突时使用git mergetool即可打开软件并会显示冲突的内容。
七:gitflow开发模式
在公司开发时,一般会有发布版本,测试版本,开发版本等其中的几个。下面对其简要介绍,详情请查看:https://blog.youkuaiyun.com/xingbaozhen1210/article/details/81386269
(1):如下所示,可以在一个组织内创建项目,方便统一管理,其过程大致如下,一些步骤已跳过:
(2):将本地项目推送到上面的仓库中,注意:git tag -a 版本标签 -m “对于版本的描述”
本地有了标签后需要将标签推送到仓库
(3):组织成员邀请
组织权限设置
项目权限设置
协同开发时先创建开发分支dev,然后每个人再在dev上创建自己的分支,自己的所有开发任务先在自己的分支上完成。
八:免密登录
1:url中体现
原来地址:https://github.com/ultralytics/yolov5.git
修改地址:https://用户名:密码@github.com/ultralytics/yolov5.git
git remote add origin https://用户名:密码@github.com/ultralytics/yolov5.git
(如果已经添加远程地址:git remote add origin https://github.com/ultralytics/yolov5.git,可以在配置文件中进行修改remote "origin":vim .git/config)
git push origin master
2:通过ssh实现
git@github.com:ultralytics/yolov5.git
(1)生成公钥和私钥(默认存在~/.ssh下,id_rsa.pub为公钥,id_rsa为私钥)
ssh -keygen
(2)拷贝公钥内容,并添加到github中,如下所示,新增ssh keys即可。
(3)在git本地中配置ssh地址
git remote add origin git@github.com:ultralytics/yolov5.git
(4)以后使用push或pull的时候他便可以直接通过公钥和私钥进行匹配。不用再输入用户名和密码。
3:git自动管理凭证