zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Git 的基本使用——笔记

2023-04-18 15:24:02 时间

Git 的基本使用

Git 和代码托管中心

代码托管中心的任务:维护远程库

局域网环境下:

  • GitLab 服务器

外网环境下:

GitHub

码云(Gitee)

基本使用

初始化本地仓库

填写用户名和邮箱作为一个标识:

  • git config --global user.name"用户名"
  • git config --global user.email"邮箱地址"

本次仓初始化

通过 git init 进行初始化,会生成一个 .git 文件夹,默认是隐藏的,不要随意修改删除。表示这是一个本次的 git 仓库。

查看用户信息:

git config -l

Git 的存储

添加文件

git add 文件名

将文件添加到暂存区,表示把已修改的文件放到下次提交时要保存的清单中。

此时所 add 的文件才能被 Git 所管理,并不是将文件放入到本地仓库就可以了。

同时如果需要 add 的文件得先放入 Git 仓库中,才能被 add,如果在仓库外是不能 add 的。

提交到仓库中

git commit -m"注释"

将文件从暂存区放入到本地仓库中,文件为已提交状态,表示文件已经保存在了本地数据库中,生成了一个新的版本。

逻辑上都是在本地计算机完成。

查看仓库状态

git status

查看当前目录中文件的所有状态。

当每一次 commit 后,版本相当于新增,暂存区已经被清空了,此时仓库为最新状态,这个时候修改之前提交的文件,此时并不会自动的提交和更新状态,而需要重新 add 将文件放到暂存区,再 commit 提交到仓库,才能将修改后的文件提交到仓库。

查看文件修改对比差异

git diff

比较文件差异

git diff 文件名

将工作区中的文件和暂存区进行比较

查看日志

git log

查看历史记录,显示从最近到最远的日志信息。

image-20221209122502982

简化日志显示

git log --pretty=oneline

image-20221209122654917

查看简短日志

git reflog

image-20221209122735787

这两者的区别在于 reflog 是将 commit 的标识取前缀,缩短了,并且:

HEAD@{移动到当前版本需要多少步}

文件回退,前进后退版本

git reset --hard [局部版本号]

既可以前进也可以后退,根据日志信息来。

回退

image-20221210104451018

image-20221210104553563

此时的版本是 563eb1e 这个。

前进

image-20221210104701375

可以看到即使使用 git reset --hard 命令进行了版本回滚,但是回滚的操作依然会被 git reflog 记录下来,但是 git log 以及 git log --pretty=oneline 命令中,都只记录了当前(也就是回滚后的)版本及之前的版本:

eg:

  1. 481e12e
  2. 12ds123
  3. 123d123
  4. we2e1w

如果从 0 回滚到 2,git reflog 会将所有的回滚操作以及之前的 commit 操作都记录下来,而另外两个命令则只有 2-3 的日志记录而没有 0-1 的。所以 git reflog 命令经常使用。

文件的删除和恢复

  • 如果本地文件和git 仓库文件都删除了

    git reset --hard 命令通过回滚版本将仓库回到删除前的一个状态。

  • 如果只是删除了本地文件,git 仓库还没提交

    git checkout -- 文件名 放弃对指定文件的修改(如果已经在缓存区则不行),只能对工作区的文件进行进行放弃修改

    git checkout . 放弃所有工作区的修改。

    git checkout -f 放弃所有工作区以及缓存区的修改

    如果对于撤销或者恢复暂存区的某个文件,可以先将该文件移除暂存区:git restore --staged <fileName> ,再使用 git checkout -- 文件名 撤销。

分支操作

分支操作相对于在某一条版本线进行分支,将一些开发交给其他人进行并行开发,再在某些版本进行合并,提高开发效率,一般情况下不建议多个分支针对同一个文件进行开发,这样不利于合并。

创建分支

git branch 分支名

查看分支

git branch -v

切换分支

git checkout 分支名

image-20221211094235553

不同的分支的操作另一个分支是不清楚的。

合并分支

  1. 切换到接受合并的分支

    git checkout 接受合并的分支

  2. 执行 merge 命令

    git merge 待合并的分支

删除分支

git branch -d 分支名

git 分支冲突

如果多个分支修改了同一个文件,在 pull 的时候会冲突:

解决办法:如果文件很少或分支少,先在 master 中合并,再修改目标文件,最后提交。

如何保证分支之间合并后的同步呢?

两者之间都进行同步保证代码是最新的,互相进行合并

远程仓库

账号注册:

创建 SSH Key:

数据需要保存在远程仓库,服务器需要对身份进行识别,SSH Key 是一种连接加密(私钥),及以后连接不需要密码。

  1. ssh-keygen -t rsa -c

    默认情况下会在 c:\Users家目录 路径下生成 .ssh 目录,里面有一个公开私钥和个人私钥,两个文件:

    image-20221211110251201

  2. ssh -T git@gitee.com

    此条命令是查看主机是否与 gitee 网站之间的 ssh 通信是否连接成功

创建远程仓库

在码云或者 GitHub 上创建一个仓库即可。

clone 远程仓库

git clone 仓库地址

推送本地仓库到远程仓库

先将一个版本提交到本地仓库,在进行推送

git push 仓库地址

拉取远程仓库到本地仓库

git pull 仓库地址

  • git fetch 主机名/分支名 拉取远程仓库的数据,获取远程仓库有而本地没有的数据。
  • git merge 主机名/分支名 合并到本仓库当前的分支

的简写。

扩展:远程地址别名设置

查看当前仓库中远程地址的别名:

git remote -v

默认情况下如果是 clone 的远程仓库,里面就有两个别名:

image-20221211113200250

推送和拉去都是 origin 当前clone的远程仓库地址。

增加远程地址

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

删除远程地址

git remote remove [别名]

解决冲突

如果本地仓库的状态与远程仓库状态不一致,在推送远程仓库时,会尝试冲突推送失败,必须先拉取更新本地仓库,再在本地仓进行处理,最后推送至远程仓库。

如果是在本地仓库 commit 之后,出现了推送冲突的话,再拉取远程仓库时,会与本地仓库 commit 进行分支合并。

Idea 操作 Git

1. idea 配置好 Git

image-20221211171604805

在 Settings 里面找到 Git,配置好 Git。

2. 创建项目并在将其设置为 Git 的本地仓库

image-20221211172025893

选中项目根目录创建 Git 本地仓库。

image-20221211172313657

选择目标文件右键,可以找到 Git,选择相应的 Git 操作。

3. 本地仓库与远程仓库建立同步

3.1 GitHub

如果是 GitHub 的话 idea 默认会有一个 GitHub 的插件,可以百度根据配置进行调整。

3.2 Gitee 码云

idea 的 Gitee 插件是需要下载的,所以先下载插件:

image-20221212101906925

在 Settings 中配置 Gitee 的账户:

image-20221212102619048

本地仓库和远程仓库进行绑定

image-20221212102919317

添加远程仓库 URL 进行管理。

image-20221212103113403

如果添加成功则下一步就是开始 pull 远程仓库的数据到本地仓库。

image-20221212104716741

选中 master,这一步需要本地分支与远程分支关联起来,然后在这里选择需要 pull 下来的远程分支。

如果这一步选中框是空的,则表示本地和远程没有关联,因为本地仓库是我们手动创建的和远程并没有建立联系,所以我们要先让两者关联起来,这样后续的管理中可以更加方便。

打开项目中的 git bash 或者在 idea 项目的控制台中输入:

两个命令:

git pull origin master --allow-unrelated-histories:允许不相关历史提交,强行拉取合并。

git push --set-upstream origin master:设置远程的 push 的分支,情况下也是 master。

然后后续设置中,就有了远程分支的选项。可以正常的进行 push 和 pull。

比较常用的是利用 Idea 直接 Clone 远程仓库,这样可以节省很多不必要的麻烦。直接可以和远程仓库保持同步。

image-20221212124309521

image-20221212124320957

在 url 中添加远程仓库链接即可。