Git&GitHub操作指南

    科技2022-07-15  145

    1 Git简介

    官网地址:https://git-scm.com/

    版本控制工具:协同修改、数据备份、版本管理、权限控制、历史记录、分支管理。

    集中式版本控制工具:SVN、VSS

    分布式版本控制工具:Git

    2 Git的安装

    下载地址:Git-2.23.0-64-bit.exe

    https://git-for-windows.github.io/ https://git-scm.com/download https://git-scm.com/ Idea插件

    安装过程中几个重要的步骤:

    ①Git Bash需要安装的,其他默认即可,下一步

    ②默认编辑器

    ③选择Git命令的执行环境

    这里推荐选择第一个,就是单独用户Git自己的命令行窗口

    不推荐和windows的命令行窗口混用

    ④HTTPS传输:使用SSL传输协议

    ⑤Configuring the line ending conversions选项

    第一个选项:如果是跨平台项目,在windows系统安装

    第二个选项:如果是跨平台项目,在Unix系统安装

    第三个选项:非跨平台项目

    ⑥terminal emulator选项

    第一个选项:使用专用的Git窗口(推荐)

    第二个选项:使用windows的cmd命令行窗口。

    ⑦ 在Configuring extra选项中,默认开启文件缓存即可(推荐)

    3 Git的结构

    3.1 Git结构

    工作区 --git add [filename]–> 暂存区–git commit [filename]–>本地库

    写代码 ----> 临时存储---->历史版本

    工作区(Working Directory):就是你电脑本地硬盘目录

    版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库

    暂存区:存放在git目录下的index文件中(.git/index)中;add后放到暂存区

    本地库:commit提交到的地方。

    3.2 Git和代码托管中心

    4 Git命令行操作

    4.1 本地初始化

    git init

    4.2 设置签名

    级别的优先级:就近原则,项目级别优先级优先于系统级别优先级。

    二者都有时,采用项目级别的签名。如果只有系统级别的优先级,以系统级别的优先级为准。二者都没有,不允许。

    ①项目级别签名

    git config user.name 项目级别用户名git config user.email 项目级别用户的邮箱 $ git config user.name 'Tom' $ git config user.email 'codeTom@aliyun.com'

    可以在.git/config中查看当前项目的配置信息

    [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [user] name = Tom email = codejiwei@aliyun.com

    ②系统级别签名

    git config --global user.name 系统级别用户名git config --global user.email 系统级别用户的邮箱 $ git config --global user.name 'Jerry' $ git config --global user.email 'Jerry@gmail.com'

    可以在C:\Users\16222 \ .gitconfig文件查看

    [user] name = Jerry email = codeJerry@aliyun.com

    4.3 基本操作

    ①状态查看

    git status 查看工作区和暂存区状态

    $ git status

    ②添加到暂存区

    git add [file name] 将工作区的“新建、修改操作的文件”添加到暂存区

    $ git add src/emp.java

    ③提交到本地库

    将暂存区的内容提交到本地库

    git commit [file name] 然后进入vim编辑器编辑日志信息git commit -m “commit message” [file name] $ git commit src/emp.java -m "create emp.java"

    ④查看历史记录

    git log $ git log

    git log --pretty=oneline $ git log --pretty=oneline

    git log --oneline $ git log --oneline

    git reflog

    记录操作日志,操作日志会保留版本号的前7位

    $ git reflog

    ⑤前进后退

    基于索引值操作(推荐)

    git reset --hard [局部索引值] $ git reset 36f9c96 Unstaged changes after reset: D src/student

    使用^符号:只能后退

    git reset --hard HEAD^注意:一个^表示后退一步 $ git reset --hard HEAD^ HEAD is now at 7b79034 update 333

    使用~符号:只能后退

    git reset --hard HEAD~n注意:表示后退n步 $ git reset --hard HEAD~2 HEAD is now at 36f9c96 update 222

    reset 的三个参数对比

    –soft

    –mixed

    –hard

    后退n步,如果会有新的内容文件生成,那么在退回到新文件生成前,那么这个新文件会删除!如果再回到最新版本新文件会重新回来。

    git reset --hard [指针位置]

    先使用reflog查看操作日志,找到最开始的指针位置,然后git reset --hard

    ⑥撤销

    1 撤销是在没有add和commit的情况下!!!

    $ git checkout -- src/emp.java

    2 那么如果add了之后怎么撤销呢?

    # 首先查看修改之后的状态: $ git status

    # 然后add $ git add huashan/ # 再查看状态: $ git status

    开始撤销~

    $ git reset HEAD huashan/ # 这个时候查看状态,又变成了红色的,修改之后的状态了 # 然后撤销 $ git checkout -- src/student.java # 这个时候就撤销了

    3 那么已经commit提交了的呢?

    这个时候就得需要需要通过版本的后退,撤销了

    git reset --hard HEAD^

    ⑦删除

    $ rm src/student

    $ git reset --hard HEAD^

    ⑧比较文件差异

    git diff [file name] 将工作区的文件与暂存区的文件进行比较git diff [本地库中历史版本] [文件名] 将工作区中的文件与本地库历史版本文件比较不带文件名比较多个文件

    4.4 分支管理

    ①分支概念

    ②分支操作

    创建分支:git branch [分支名]

    $ git branch dev

    查看分支:git branch -v

    $ git branch -v

    $ git branch

    切换分支:git checkout [分支名]

    $ git checkout dev Switched to branch 'dev'

    合并分支:

    --1 在dev分支上修改文件student --2 提交文件student --3 切回master分支,看不到我们刚修改的内容。git checkout master --4 合并分支。git merge dev 第一步:切换到被合并分支:git checkout [被合并的分支名]第二步:git merge [有新内容分支名]

    合并分支的同时新建新的分支

    $ git checkout -b dev2

    删除分支

    $ git branch -d dev2 Deleted branch dev2 (was 92f0d56).

    4.5 合并冲突

    冲突一般指同一个文件同一个位置的代码,在两个版本合并时版本管理软件无法判断到底应该保留哪一个版本,因此会提示该文件发生冲突,需要程序员手动判断解决冲突。

    步骤1:切换到dev分支

    git checkout dev

    步骤2:修改内容,添加,提交

    git add src/student.java git commit -m "dev update student.java"

    步骤3:切换到master分支

    git checkout master

    步骤4:修改相同文件相同位置。添加,提交

    git add src/student.java git commit -m "master update student.java"

    步骤5:把dev分支合并到master分支

    git meger dev

    步骤6:查看文件,解决冲突

    步骤7:查看状态

    git status

    步骤8:添加提交

    git add src/student.java git commit -m "merged"

    5 GitHub

    5.1 创建GitHub账户

    第一步:注册,登录

    第二步:创建一个新的远程仓库

    设置远程库的名称

    5.2 创建远程库地址别名

    git remote add [别名] [远程地址]

    $ git remote add test https://github.com/codejiwei/test01.git

    git remote -v 查看所有远程地址别名

    $ git remote -v # 方式2 $ git remote

    5.3 推送到远程库

    git push [别名] [分支名]

    git push test master

    5.4 克隆

    项目经理创建的远程GitHub库,对于刚上班的程序猿,会把远程库的url地址发给程序猿。然后程序猿用这个url,使用git clone 的方式克隆到本地。

    克隆不需要密码是因为远程库是public项目

    git clone [远程地址]

    $ git clone https://github.com/codejiwei/huashan.git

    克隆clone执行完之后,会自动创建为这个远端地址建一个origion的代号!!!

    不然的话,还得问原来项目的作者,这个远端的代码是什么吗???

    5.5 权限不足问题

    我们一般是不能直接push到远程库的,需要项目经理,把程序猿拉入到合作伙伴才能push。

    添加到合作伙伴的方式:

    发送添加到合作伙伴的申请者的邮箱后,还需程序猿接受该申请,这个时候就可以push代码了。

    5.5 拉取

    从GitHub更新项目

    pull = fetch + merge

    git fetch [远程库地址别名] [远程分支名]

    git merge [远程库地址别名/远程分支名]

    git pull [远程库地址别名] [远程分支名]

    git pull origin master

    5.6 协助冲突

    上面的冲突是分支间的冲突!这里的冲突是程序猿和程序猿间的冲突

    上传代码push的时候,由于成员A和成员B修改了同一个文件中相同位置的代码。先提交的可以提交成功,但是后提交push的时候就会报错!会报一个版本较低的错误!

    解决方法:

    步骤1:先pull拉取最新的代码,也就是成员A刚提交的代码

    步骤2:然后解决冲突

    步骤3:add、commit到本地库

    步骤4:push到远程库

    5.7 Fork

    程序猿A不能完成任务,找了一个大神程序猿B来帮忙,这个时候项目经理允许之后,会同意大神B Fork一份项目,然后程序猿B会clone一份到本地。然后修改后push到自己的远程库。然后回pull request给项目经理,项目经理看到后可以在GitHub上merge。

    6 IDEA Git操作

    6.1 配置IDEA

    6.2 共享项目

    步骤1:通过share subject把整个项目传入GitHub中

    步骤2:使用token令牌登录GitHub

    步骤3:新建仓库

    步骤4 把选中的代码纳入暂存区,提交本地库(git add、commit)

    主要的文件:java文件,pom文件,properties配置文件

    idea自动生成的文件一般不要上传。

    6.3 手动提交

    步骤1:编写代码

    步骤2:add和commit

    步骤3:push到远程GitHub

    步骤4:这个时候就已将提交到GitHub上了

    6.4 从远程库Clone

    步骤1 通过clone导入远端项目

    步骤2:填写远端地址

    步骤3:修改代码然后提交

    步骤4:推送到GitHub

    6.5 与远程库Pull及解决冲突

    当出现了冲突怎么解决呢?

    步骤1:在[yuebuqun777888]的模块中修改与[linghuchong777888]相同位置的代码

    步骤2: 进行之间做过的Commit和Push

    步骤3:因为两个人都是提交相同位置的代码

    IDEA会弹出如下提示

    我们选择Merge操作,把冲突的部分进行手工合并。

    三个选择:

    Accept Yours 接受自己的版本,覆盖掉别人和你冲突的部分(危)

    Accept Theirs 接受别人的版本,覆盖掉你和别人冲突的部分(危)

    Merge 手工合并

    步骤4:手工合并

    合并完成后,会自动提交到本地库

    步骤5:合并完成后再次手工push远端

    6.6 文件状态

    红色:未提交的文件(本地库中不存在)绿色:未提交的文件,但是add到了暂存区(本地库中没有,暂存区中有)蓝色:提交过,但是有做过修改(本地库中存在)黑色:提交过本地库,且之后没有再修改还过(本地库中存在)

    7 Git工作流

    7.1 分支种类

    ①主干分支master

    主要负责管理正在进行的生产环境代码。永远保持正在运行的生产环境完全一致。

    ②开发分支develop

    主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

    ③bug修理分支hotfix

    要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

    ④发布版本分支release

    较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。

    ⑤功能分支feature

    为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。

    7.2 分支操作

    步骤1 建立新的分支

    步骤2:在这个分支下添加新代码

    步骤3:提交代码,并push到远程库

    步骤4:在GitHub上可以看到新的分支

    Processed: 0.019, SQL: 8