git使用教程

git的作用

1.代码备份

2.老旧版本回溯

3.多人协同开发

4.问题代码追责

版本控制工具:

每次的修改都认为是一个版本,就很明确,每次的修改都是谁写的,都加上一个版本号

git共享版本库

对于同一个项目,任何一个电脑上都有完整的版本库,不是放在同一个地方

git工作流程

配置用户信息的作用

因为每次提交都要确定是哪个人提交的,所以需要配置git的基本用户信息

这个可以随便配,不存在的邮箱也行

获得本地仓库

明确一个事情:一个远程仓库和一个本地仓库

先明确本地仓库这个概念

工作

git的工作目录:当前目录下,除了.git以外,都属于工作目录

1.当新创建一个文件的时候,这时和git没有任何关系,属于未跟踪状态

2.git add可以把文件从工作区转到暂存区,这是和本地仓库之间的一个缓存区

3.如果想要真正的实现版本控制,需要提交到本地仓库git commit

进入到了仓库,就变成了 一次提交记录

仓库里面有一个详细记录,记录了到底提交过几次

第一次提交是一个版本,第二次提交也是一个版本,第三次提交也是一个版本


git status命令

查看工作区和缓存区的所有文件,哪些文件第一次提交,哪些文件进行了修改,哪些文件在暂存区中,可以使用git status命令


git add .  和git commit -m "注释内容"

注意:在使用git commit命令时,最好加上本次提交的注释,以便查看日志,显示这个注释


git log


如果 将工作目录 回退到之前提交过的版本?git reset --hard 版本id

git reflog查看所有的版本id(包括git log看不到的)


如果我们希望在工作目录中,有些文件不被纳入git的管理,可以在“工作目录”下创建.gitignorewen文件(文件名称固定),列出要忽略的文件名(可以使用通配符)



分支(重点切换分支和合并分支)

git branch 查看分支

git branch 分支名 创建分支

git checkout 分支名  切换分支

1.什么是分支?

在多人协作的过程中,需要每个人有一个分支,相当于不同的业务线,每个人互不影响,你改你的,我改我的

2.head的作用是什么?

head指向谁,谁就是当前的分支

把代码放到一块,叫合并merge

(当前分支为master)git merge 分支名(例如分支名叫branch1)

是把branch1上的代码合并到当前分支master上(不要搞反了)

我修改一个文件,不能是修改所有分支,所以

工作区只能为唯一的一个分支服务,就是我当前处于哪个分支上,修改的就是哪个分支上的文件

删除分支

git branch -d 分支名



创建分支,是把当前分支的内容拷贝到另一个分支吗?不是,是通过引用的方式



解决冲突(面试内容)

当两个分支,修改了同一个文件的同一行代码,怎么办?(前提两个分支的这行代码的修改都已经commit提交给git管理了)

当合并分支的时候应该用你的代码还是我的代码?git不能决定



实际开发中的分支使用



把本地代码推到远程仓库

1.gitee等平台新建一个仓库(注意:不要添加readme文件初始化这个远程仓库,后续可能会麻烦)

创建私有的还是公开的,这个不重要,表示谁能看到远程仓库里面的代码

2.是每个人都能上传本地仓库的代码到这个远程仓库吗?不是的

如何给gitee证明你是这个远程仓库的主人

有几种方案?

(1)让你输入用户名和密码(登录gitee的)一般不用这种

(2)公私钥

git生成的公钥,添加到整个账户的公钥管理(不是添加到单个项目的公钥管理)

仓库地址使用SSH的,不用Https的

然后,将本地仓库和远程仓库建立连接,需要给远程仓库起个名字,一般是固定死的,就叫origin

,约定死的,看见origin就知道是远程仓库


// 第一次建立连接,将本地仓库和远程仓库建立连接

// git@gitee.com:mengchuan3/mc-club.git是远程仓库的地址

// origin是给这个远程仓库起的名字(约定俗成叫origin)

 git remote add origin git@gitee.com:mengchuan3/mc-club.git


查看远程仓库有哪些

git remote


把本地代码push到远程仓库

// origin是远程仓库的名称,推到哪个远程仓库

// master  推到远程仓库的哪个分支(没有会自动创建)

git push origin master:master(前面的是本地的master:后面的是远端的master)

// 把本地的当前分支master和远程仓库origin的master建立连接后

git push --set-upstream origin(远程仓库别名) master(本地):master(远程)

后续只用git push即可




从远程仓库clone文件到本地仓库

git clone 远程仓库链接

克隆一般对于一个仓库只使用一次

克隆是对于整个项目的复制

而一般对于项目,我们只需要维护后续的增删即可



远程仓库有了新的提交(别人提交的),如何拉取到我的本地仓库中?

一端:push 提交到远程仓库

另一端:fetch把远程仓库的更新拉取到本地,只看得到更新,但是远程仓库的新的更新文件没过来,需要再merge才能到本地仓库(将这两步统一简化后就是一步操作git pull)


使用git fetch抓取远程仓库的文件到本地仓库,为啥还要merge呢?

git fetch 命令用于从远程仓库获取最新的更改,但将这些更改合并到你的当前工作分支。相反,它会将这些更改存储在你的本地仓库中的一个特殊位置,称为“远程跟踪分支”(remote-tracking branch)。

例如,如果你有一个名为 origin 的远程仓库,并且你正在本地 master 分支上工作,git fetch origin  master会从 origin 的 master 分支获取最新的更改,并将这些更改存储在本地的 origin/master 分支中
为什么需要 merge

当你使用 git fetch 获取了远程仓库的最新更改后,你的本地仓库现在包含两个版本的 master 分支:

  • 你的本地 master 分支,它包含你在最后一次与远程仓库同步后所做的所有更改。
  • 远程跟踪分支 origin/master,它包含远程仓库中 master 分支的最新更改。
  • git mergegit merge origin/master 会将 origin/master 分支上的更改合并到你的本地 master 分支。这通常会产生一个新的提交,该提交包含了你和远程仓库所做的所有更改。


当把代码git push推送到远程仓库时,产生冲突,怎么解决?(面试题)

场景1:产生冲突的原因:A和B都在本地仓库修改了同一个文件的同一行代码,A用户在本地修改代码后,优先推送到了远程仓库,此时,B用户在本地修改完,提交到本地仓库,也要推送到远程仓库,此时B用户晚于A用户,提交git push会产生冲突

解决方法:

(1)先使用git pull拉取  A提交到远程仓库的代码 

因为pull = fetch + merge ,fetch抓取A提交的代码到本地的origin/master分支没问题,但是合并分支时,会产生冲突(和合并两个本地分支的代码产生的冲突一样,解决方法也一样)

(2)手动解决冲突

打开冲突的文件,手动保留想要的其中一个修改,或者重新修改也行,再保存

(3)git add . 

(4)git commit -m "提交说明"

(5)git push 即可

场景2:A和B都在本地仓库修改了同一个文件的 不同行 代码,A用户在本地修改代码后,优先推送到了远程仓库,此时,B用户在本地修改完,提交到本地仓库,也要推送到远程仓库,此时B用户晚于A用户,提交git push会产生冲突

解决方法:

(1)先使用git pull拉取  A提交到远程仓库的代码 

因为pull = fetch + merge ,fetch抓取A提交的代码到本地的origin/master分支没问题,因为修改的不是一个地方,所以merge合并分支时,不会产生冲突。

(3)git add . 

(4)git commit -m "提交说明"

(5)git push 即可

两个人的提交说明都会保存下来



idea开发工具使用git是有点弱化了工作区、暂存区、本地仓库的概念

把工作区和暂存区归为了一类

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

#学习的路上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值