实验一 git以及github使用

命令速查:

类别 命令 说明
基本命令 git init 初始化 Git 仓库
git status 查看当前工作区和暂存区状态
git add 文件名 把文件添加到暂存区
git commit -m "提交说明" 提交文件到本地仓库
git log 查看提交历史
git log --oneline 查看简洁提交历史
git diff 查看工作区与暂存区的差异
分支相关 git branch 查看当前分支
git branch 分支名 创建新分支
git switch 分支名 切换到指定分支
git checkout 分支名 切换到指定分支(较旧的命令)
git merge 分支名 合并指定分支到当前分支
git branch -d 分支名 删除本地分支(-D强制删除)
远程仓库操作 git remote add origin URL 添加远程仓库
git push -u origin 分支名 推送到远程仓库
git pull 从远程仓库拉取代码并合并到当前分支
git fetch 从远程仓库拉取代码但不进行合并
git clone URL 克隆远程仓库
回退与恢复 git reset --hard commitID 回退到指定 commit(彻底丢弃修改)
git reset --soft commitID 回退到指定 commit,但保留修改内容
git reset 文件名 撤销暂存区的文件修改(从暂存区移除)
git checkout -- 文件名 恢复工作区文件到最新提交版本
git reflog 查看 Git 的操作历史,包括 reset、merge 等
标签操作 git tag v1.0 创建标签
git tag 查看所有标签
git push origin v1.0 推送标签到远程仓库
文件操作 git rm 文件名 删除文件并从 Git 中移除
git mv old_name new_name 移动或重命名文件
显示与美化 git log --oneline --graph --all --decorate 显示图形化、简洁的提交历史
git config --list 查看 Git 配置
Git 别名 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 创建 git-log 别名,用于简化 git log 命令
alias ll='ls -al' 创建 ll 别名,简化 ls -al 命令

版本控制器的方式

git是分布式版本控制工具

分为两种:

  • 集中式版本控制工具
  • 分布式版本控制工具

git工作流程

命令如下:

  1. clone(克隆):从远程仓库中克隆代码到本地仓库
  2. checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加):在提交前先将代码提交到暂存区
  4. commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch(抓取):从远程库抓取到本地仓库,不进行任何的合并动作,一般操作比较少
  6. pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到工作区,相当于 fetch + merge
  7. push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

git环境安装与配置

  1. 基本的Linux命令如下:
bash 复制代码
ls/ll 查看当前目录
cat 查看文件内容
touch 创建文件
vi vi编辑器
  1. 安装

官网连接点击此处:链接

安装完成之后,进入任意文件夹,右击发现这两个选项:

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具

从别的地方复制东西过来不能直接ctrl c黏贴,你可以按一下鼠标的滚轮黏贴或右击选择paste

  1. 基本配置:设置用户信息,即用户名和邮箱
bash 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

我配置的是:

bash 复制代码
git config --global user.name "meiyouname"
git config --global user.email "14792102+meiyouname@user.noreply.gitee.com"

查看当前git配置的名字和邮箱

bash 复制代码
git config --global user.name
git config --global user.email
  1. 为常用指令配置别名
  • 打开用户目录,创建.bashrc文件
bash 复制代码
touch ~/.bashrc

默认会创建在 C:\Users\你的用户名 目录下

  • 在.bashrc文件中输入如下内容
bash 复制代码
# 用于输出 git 提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  • 打开gitBash,执行
bash 复制代码
source ~/.bashrc

看看效果

  1. 解决GitBash乱码问题

以下命令请在管理员身份下运行

  • 打开 Git Bash 执行下面命令:
bash 复制代码
git config --global core.quotePath false
  • ${git_home}/etc/bash.bashrc 文件最后加入下面两行:
bash 复制代码
# 先找到bash.bashrc文件
which bash
ls /usr
ls /etc  #然后你就可以看到了
# 然后开始编辑
vim /etc/bash.bashrc
bash 复制代码
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

获取本地仓库

  1. 把一个普通文件夹变成 Git 仓库

进入此空目录后右击打开git bash窗口

bash 复制代码
git init

执行后,会出现一个 .git 隐藏文件夹

git常用命令

  1. git status --- 查看当前状态(最常用)
bash 复制代码
git status

它告诉你:

  • 哪些文件修改了
  • 哪些文件准备提交
  • 哪些文件没被追踪
  1. git add --- 把文件从工作区加入"暂存区"

加入单个文件:

bash 复制代码
git add 文件名

加入所有改动:

bash 复制代码
git add .
  1. git commit --- 把文件从暂存区到本地仓库
bash 复制代码
git commit -m "提交说明"

例子:

bash 复制代码
git commit -m "实现登录功能"

每次改完代码,都必须 commit 才算"正式保存"

  1. git log --- 查看提交日志

完整模式:

bash 复制代码
git log

用于查看你之前提交过什么。

  • git log [option]
    • options
      • --all 显示所有分支
      • --pretty=oneline 将提交信息显示为一行
      • --abbrev-commit 使得输出的commitld更简短
      • --graph 以图的形式显示

这样太麻烦了,我们上面已经设置了别名,直接git-log,以精简的形式显示提交记录

  1. 版本切换/回退
bash 复制代码
git reset --hard commitID

commitID 可以使用 git-loggit log 指令查看

bash 复制代码
git reflog

可以看到已经删除的提交记录

  1. 实战一下

初始化一个仓库

bash 复制代码
git init

新建一个 test.txt 文件

写点东西,保存。

查看状态

bash 复制代码
git status

加到暂存区

bash 复制代码
git add .

提交

bash 复制代码
git commit -m "第一次提交"

修改 test.txt 再提交一次

bash 复制代码
git add .
git commit -m "第二次提交"
git status

查看提交历史

bash 复制代码
git log

git分支_常用指令

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修复、开发新的功能,以免影响开发主线

  1. 查看本地分支
bash 复制代码
git branch
  1. 创建分支dev
bash 复制代码
git branch 分支名
  1. 切换分支
bash 复制代码
git switch 分支名
# 我们还可以直接切换到一个不存在的分支(创建并切换)
git switch -c 分支名
  1. 合并分支

一个分支上的提交可以合并到另一个分支

首先切换到目标分支上

bash 复制代码
git merge 分支名

你要把 dev 合并进 master ------也就是说,你希望 master 拥有 dev 的内容

bash 复制代码
# 切换到 master 分支
git switch master
# 把 dev 分支合并进来
git merge dev
  1. 删除分支

不能删除当前分支,只能删除其他分支

git branch -d 分支名 删除分支时,需要做各种检查

git branch -D 分支名 不做任何检查,强制删除

bash 复制代码
git branch -d 分支名
git branch -D 分支名

示例:

第一行的意思是:HEAD 当前指向 master 分支,而 master 分支当前指向这个 commit(993349c)

HEAD = 你当前所处的位置(当前检出的分支 )

master 是你当前分支的名称

解决冲突

bash 复制代码
git switch -c dev
git branch
bash 复制代码
# 在dev分支上修改file01.txt内容,count = 2
git status
git add .
git commit -m 'update file01 count2'
git status
bash 复制代码
# 切换回master分支再修改file01.txt内容,count=3
git switch master
git status
git add .
git commit -m 'update file01 count3'
git status

然后尝试合并

bash 复制代码
git merge dev

报错:

打开file01.txt发现girt自动标记了冲突了地方,以下为file01.txt内容

plain 复制代码
<<<<<<< HEAD
update count=3
=======
update count=2
>>>>>>> dev

从<<<<<<< HEAD到=======的内容,指的是你当前分支的修改内容

从=======到>>>>>>> dev的内容,是dev分支上修改的内容

那怎么解决呢?

直接在file01.txt修改成希望合并后的样子,其他的删除

bash 复制代码
# 添加到暂存区
git add .
# 添加到本地仓库
git commit -m '解决合并冲突'
git-log

最终count=3

分支使用流程

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线(master)上分离出来进行重大Bug修复、开发新功能,以免影响开发主线。

分支类型:

  1. master 分支 (灰色)
    • 用于保存生产环境中的代码,任何时候,master 分支上的代码都是可以部署到生产环境的。
    • master 分支中进行 Bug 修复时会创建 hotfix 分支。
  2. develop 分支 (黄色)
    • develop 是主开发分支,所有功能开发都会基于此分支。
    • 当新的功能开发完成后,会将其合并到 develop 分支。如果 develop 上的功能开发完成并稳定后,再合并到 master 分支,准备上线。
  3. feature 分支 (绿色)
    • 每一个新的功能开发都会从 develop 创建一个 feature 分支。
    • 功能开发完成后,feature 分支会合并回 develop 分支。每个功能的 feature 分支是独立的,目的是确保不同的功能开发不会互相干扰。
    • 如果某个功能的开发被完成或被暂停,可以删除相应的 feature 分支。
  4. hotfix 分支 (红色)
    • master 上的生产环境有 Bug 需要修复时,从 master 分支创建 hotfix 分支进行修复。
    • 修复完成后,hotfix 分支会合并回 masterdevelop 分支,并且 hotfix 分支可以删除。
  5. release 分支 (蓝色)
    • develop 分支上的功能完成并且准备发布时,会从 develop 创建 release 分支。
    • release 分支用于完成版本发布前的最后测试和小修复。
    • release 分支创建后,开发者将继续在 develop 分支中开发新功能。release 分支会合并回 master,并标记发布版本。同时,release 分支也会合并回 develop

图中标注的操作步骤:

  • 合并步骤
    • 图中多个 merge 操作表示分支之间的合并过程。比如,feature 分支开发完成后会合并到 develop 分支,develop 合并到 master 等。
  • bug 修复和发布操作
    • Bug 修复完成后,需要合并到 master 分支并发布。
    • release 分支用于标记发布的版本,发布完成后,可以删除 release 分支。

主要流程:

  1. Bug 修复
    • 当出现 Bug 时,创建 hotfix 分支进行修复,修复完成后,合并回 masterdevelop 分支,hotfix 分支可以删除。
  2. 功能开发
    • 开发新功能时,创建 feature 分支,从 develop 分支开始,开发完成后合并回 develop
  3. 发布准备
    • 功能开发完成并稳定后,创建 release 分支准备发布。
    • release 分支合并到 master,并标记版本,发布后合并回 develop

总结:

  • master:生产环境代码,确保可以随时部署。
  • develop:主开发分支,所有新功能首先合并到这里。
  • feature:功能开发分支,每个新功能独立开发。
  • hotfix:Bug 修复分支,修复紧急问题。
  • release:发布分支,准备新版本发布。

合并的快进模式

什么是快进合并?

快进合并(Fast-forward merge)是 Git 中的一种合并方式,通常发生在以下情况下:

  • 假设你有两个分支:masterfeature
  • feature 分支的提交是从 master 分支上创建的,且 master 分支没有做任何新的提交(或者做的提交很少,feature 分支的提交直接跟在 master 分支之后)。

快进合并是怎么工作的?

  • 你尝试将 feature 分支合并到 master 分支,但 master 分支没有变化,只是处于 feature 分支的前一个提交点。
  • Git 会将 master 分支直接"推向" feature 分支的最新提交,不需要合并提交。

为什么叫"快进"?

这个过程就像是"快进"播放视频:master 分支直接跳到 feature 分支的最新状态,而不做任何复杂操作。

举个例子:

假设你有如下的提交历史:

plain 复制代码
A---B---C (master)
         \
          D---E (feature)
  1. master 分支有提交 A、B、C。
  2. feature 分支从 C 开始,做了两个提交 D 和 E。

当你尝试将 feature 合并到 master 时,Git 会发现 master 分支的提交历史正好在 feature 分支的前面,所以 Git 可以简单地将 master 分支的指针直接"推到" E,即:

plain 复制代码
A---B---C---D---E (master, feature)

快进合并的特点:

  • 没有新的合并提交 :因为 master 直接快进到 feature,没有复杂的合并操作,也就不会产生新的合并提交。
  • 简单 :如果 masterfeature 之间没有其他变化,Git 会自动进行快进合并。

快进合并是 Git 在历史没有分叉(没有冲突)时使用的一种简单合并方式,它将目标分支的指针直接推进,而不需要额外创建新的提交。这就像是快进播放:直接跳到最新的状态。

仓库托管_注册_创建仓库_配置公钥

  1. 注册gittee

https://gitee.com/

gitee无法推送大小超过200MB的文件

  1. 新建仓库

仓库建立完毕,然后把自己的代码推上去

  1. 配置密钥
  • 生成SSH公钥
bash 复制代码
ssh-keygen -t rsa

不断回车,如果公钥已经存在则自动覆盖

  • gittee设置账户公钥

查看密钥

bash 复制代码
cat ~/.ssh/id_rsa.pub

复制下来,打开gitte网站的设置

  • 验证是否配置成功
bash 复制代码
ssh -T git@gitee.com

选yes

远程仓库添加_查看_推送

复制的就是远程仓库的地址

  1. 添加远程仓库

此操作是先初始化本地库,然后与已创建的远程库进行连接

  • 命令:git remote add <远端名称> <仓库路径>
    • 远端名称 ,默认是 origin,决定了远端服务器的设置。
    • 仓库路径,从远端服务器获取此 URL。
  1. 查看远程仓库
bash 复制代码
git remote

实操:

bash 复制代码
# 记得初始化仓库
git init
git remote add origin https://gitee.com/meiyouname/git_test.git
# 查看是否添加成功
git remote
  1. 把本地代码推送到远程仓库

命令:git push [-f] [--set-upstream] [远端名称] [本地分支名|远端分支名]

  • 如果远程分支名和本地分支名相同,则可以只写本地分支:
  • origin 是远程仓库的默认名称(你也可以将其替换为其他远程仓库的名称)
  • master 是你要推送的分支名称。
bash 复制代码
git push origin master
  • --set-upstream 推送到远端的同时并建立起本地分支和远端分支的关联关系:
bash 复制代码
git push --set-upstream origin master
  • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名:
bash 复制代码
git push

git push 会将 master 分支推送到已关联的远端分支。

实操:

bash 复制代码
# 记得把文件添加到git仓库
git add .
git commit -m "Initial commit"
git push origin master

查看远程仓库,在gittee刷新

补充:

可以在提交推送(add commit)之前创建 .gitignore 文件

bash 复制代码
echo "# 大文件和数据集" > .gitignore
echo "*.pth" >> .gitignore
echo "*.pt" >> .gitignore
echo "*.h5" >> .gitignore
echo "data/" >> .gitignore
echo "results/" >> .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore

clone

  1. 如果已经有一个远程仓库,我们可以直接 clone 到本地。

命令:git clone <仓库路径> [本地目录]

  • 本地目录可以省略,默认会自动创建一个目录。
  • 在此复制SSH链接
bash 复制代码
git clone git@gitee.com:meiyouname/git_test.git

发现本地和克隆无区别

抓取和拉取

远程分支和本地的支持一样,我们可以进行 merge 操作,只是需要先把远端仓库的更新都下载到本地,再进行操作。

  • 抓取命令:git fetch [remote name] [branch name]
    • 抓取命令会将远程仓库的更新拉取到本地,不会进行合并。
    • 如果不指定远端仓库名称和分支,则拉取所有分支。
bash 复制代码
git fetch origin master
  • 拉取命令:git pull [remote name] [branch name]
    • 拉取命令会将远端仓库的修改拉到本地并自动进行合并,相当于 fetch + merge
bash 复制代码
git pull origin master

实验过程:

bash 复制代码
# 新开一个文件夹
git clone git@gitee.com:meiyouname/git_test01.git repo1
cd repo1
ls
bash 复制代码
# 在同级目录
cd ..
git clone git@gitee.com:meiyouname/git_test01.git repo2
cd repo2
bash 复制代码
# 在 repo2 中制造一个更新并 push
echo "update from repo2" >> test.txt
git add test.txt
git commit -m "update from repo2"
git push origin master
bash 复制代码
# 回到repo1
cd ../repo1
git-log
# 只拉更新,不合并
git fetch origin master
git-log
bash 复制代码
# 手动合并远程分支
git merge origin/master
git-log
bash 复制代码
# 为了演示 pull,我们先把 repo1 回退一格:
git reset --hard HEAD~1
# 执行pull
git pull origin master

idea配置

在idea设置中找到git选项

在idea中操作git

先远程创建仓库

ssh地址:git@gitee.com:meiyouname/springmvc_demo.git

创建本地仓库:

我们希望忽略.idea,于是创立.gitignore文件

python 复制代码
# IntelliJ IDEA project files
.idea/
*.iml
*.ipr
*.iws

# Maven
target/

# Logs
*.log

# OS files
.DS_Store
Thumbs.db

然后就初始化成功了

我们来添加远程仓库

遇到警告仍然提交并推送即可

如果你的远程仓库里面已经有东西,导致推送被拒

你想覆盖,可以在终端执行

bash 复制代码
git push -u origin master -f
相关推荐
无敌暴龙兽3 小时前
Github 开源项目提交PR(Pull Request)流程指南
github
AutoMQ3 小时前
如何选择合适的 Diskless Kafka
后端·架构·github
不败公爵3 小时前
Git的回滚方法
git
vortex53 小时前
Windows 下 Git Bash 终端高效配置指南
windows·git·bash
小生不才yz4 小时前
(五)历史与追溯 - git bisect 命令的使用
git
摇滚侠4 小时前
零基础小白自学Git_Github教程,GitHubDeskTop安装,笔记10
笔记·git·github
笨蛋少年派4 小时前
git本地版本控制简介
git
摇滚侠4 小时前
零基础小白自学 Git_Github 教程,GitHub 是如何工作的,笔记08
笔记·git·github
小Lu的开源日常4 小时前
如何将 GitHub 仓库从个人账户转移到组织账户
git·开源·github
G皮T4 小时前
【Elasticsearch】索引别名 aliases
大数据·elasticsearch·搜索引擎·es·索引·索引别名·aliases