Git&GitHub操作指南

本文详细介绍了Git作为版本控制工具的基本概念、安装步骤、命令行操作,包括初始化、设置签名、基本操作如添加、提交、查看历史记录、分支管理、合并冲突,以及与GitHub的交互如克隆、推送和拉取。此外,还涉及了IDEA中的Git操作和工作流。
摘要由CSDN通过智能技术生成

1 Git简介

1601340182320

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

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

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

分布式版本控制工具:Git

image-20201214101341536

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需要安装的,其他默认即可,下一步

image-20201214101730579

②默认编辑器

image-20201214101832981

③选择Git命令的执行环境

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

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

image-20201214102331687

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

image-20201214102403466

⑤Configuring the line ending conversions选项

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

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

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

image-20201214102439804

⑥terminal emulator选项

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

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

image-20201214102526400

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

image-20201214102625112

3 Git的结构

3.1 Git结构

image-20201214171516628

工作区 --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

    1601341006999

4.2 设置签名

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

  • 二者都有时,采用项目级别的签名
  • 如果只有系统级别的优先级,以系统级别的优先级为准
  • 二者都没有,不允许
①项目级别签名
  • git config user.name 项目级别用户名
  • git config user.email 项目级别用户的邮箱
$ git config user.name 'Tom'
$ git config user.email 'codeTom@aliyun.com'

1601373802255

可以在.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'

1601373994300

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

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

4.3 基本操作

image-20201214165431369

①状态查看

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

$ git status

image-20201214144841692

②添加到暂存区

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"

image-20201214145036691

④查看历史记录
  • git log
$ git log

image-20201214145513638

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

image-20201214145551835

  • git log --oneline
$ git log --oneline

image-20201214145622616

  • git reflog

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

$ git reflog

image-20201214145712194

⑤前进后退
  • 基于索引值操作(推荐)

    • 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

image-20201214170944051

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

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

image-20201214190713742

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

image-20201214190819038

开始撤销~

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

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

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

git reset --hard HEAD^
⑦删除
$ rm src/student

image-20201214171236738

$ git reset --hard HEAD^

image-20201214171348758

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

4.4 分支管理

①分支概念

1601375068137

②分支操作
  • 创建分支:git branch [分支名]

    $ git branch dev
    
  • 查看分支:git branch -v

    $ git branch -v
    

    image-20201214174749644

    $ git branch
    

    image-20201214180221319

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

    $ git checkout dev
    Switched to branch 'dev'
    

    image-20201214174837504

  • 合并分支:

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

    $ git checkout -b dev2
    

    image-20201214180005808

  • 删除分支

    $ 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

image-20201214181348634

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

image-20201214181451800

步骤7:查看状态

git status

image-20201214181548752

步骤8:添加提交

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

1601375238320

5 GitHub

image-20201214190356829

5.1 创建GitHub账户

  • 第一步:注册,登录

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

    1601377027669

    设置远程库的名称

5.2 创建远程库地址别名

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

    $ git remote add test https://github.com/codejiwei/test01.git
    
  • git remote -v 查看所有远程地址别名

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

    image-20201214182059058

5.3 推送到远程库

git push [别名] [分支名]

git push test master

image-20201214182915081

5.4 克隆

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

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

git clone [远程地址]

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

image-20201214183028655

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

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

5.5 权限不足问题

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

添加到合作伙伴的方式:

image-20201214192852304

image-20201214192907314

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

5.5 拉取

从GitHub更新项目

pull = fetch + merge

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

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

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

git pull origin master

image-20201214193207646

5.6 协助冲突

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

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

解决方法:

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

步骤2:然后解决冲突

步骤3:add、commit到本地库

步骤4:push到远程库

image-20201214193411255

5.7 Fork

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

image-20201214194913110

6 IDEA Git操作

6.1 配置IDEA

image-20201214200456495

6.2 共享项目

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

image-20201214200612078

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

image-20201214200801963

步骤3:新建仓库

image-20201214201013008

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

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

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

6.3 手动提交

步骤1:编写代码

步骤2:add和commit

image-20201214202029780

步骤3:push到远程GitHub

image-20201214202000289

image-20201214202047673

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

6.4 从远程库Clone

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

image-20201214202256520

步骤2:填写远端地址

image-20201214204023721

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

image-20201214204444834

image-20201214204548402

步骤4:推送到GitHub

image-20201214204629787

image-20201214204645000

6.5 与远程库Pull及解决冲突

image-20201214225030611

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

image-20201214225219611

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

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

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

IDEA会弹出如下提示

image-20201214230801781

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

image-20201214230822467

三个选择:

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

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

  • Merge 手工合并

步骤4:手工合并

image-20201214230851327

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

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

image-20201214231007762

image-20201214231016487

6.6 文件状态

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

7 Git工作流

1601378052395

7.1 分支种类

①主干分支master

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

②开发分支develop

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

③bug修理分支hotfix

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

④发布版本分支release

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

⑤功能分支feature

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

7.2 分支操作

步骤1 建立新的分支

image-20201214223901358

image-20201214224029760image-20201214224202475

image-20201214224243391

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

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

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

image-20201214224648155

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最佳第六六六人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值