Git和github

本文详细介绍了Git的使用,包括创建版本库、配置信息、查看代码状态、提交代码、分支管理以及冲突解决。同时,深入讲解了GitHub的使用,如搭建项目、推送代码、克隆与拉取代码、分支合并及解决协作中的冲突。此外,还探讨了Git的优势,如版本跟踪、代码同步和测试保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本控制工具

功能解释备注
协同修改多人并行不悖的修改服务器端的同一个文件。最后一个提交的解决代码不同的冲突
数据备份不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
权限控制对团队中参与开发的人员进行权限控制;对团队外开发者贡献的代码进行审核——Git 独有
历史记录查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。
分支管理允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

在这里插入图片描述

Git操作

  1. 进入项目目录,右键“git bash here”,创建版本库,(自动创建.git,存放gits所有版本的历史记录,配置信息等)
git init
  1. 配置信息:
    配置用户名-配置用户邮箱
git config user.name "用户名"
git config user.email "用户邮箱"

(在目录中的隐藏文件.git\config可查看)
统一配置(若具体项目中未配置则会去找全局的)

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

(在C:\Users\hp.gitconfig可查看)

  1. 查看当前代码状态
git status

红色字体显示的文件表示没有被add,绿色字体显示的文件表示放到了暂存区(已经被add准备要commit但还没有commit)
这时还可以通过git diff看修改的内容

  1. 提交代码
git add 文件夹  #也可以是文件夹里具体文件  文件夹/文件名

note:文件名带中文的话,要整个打引号
5. 把暂存区的文件提交

git commit -m "修改说明"

note:
a. 若不用-m “修改说明”,则会跳转到vscode,在第一行写"修改说明"保存
或者vim的模式,按i在第一行写"修改说明",写完按esc 再输入:wq退出
b. 若使用-am"修改说明",表示add操作+commit操作在同一步中进行

  1. 查看修改记录
git log

在这里插入图片描述
上图包括了版本号,提交用户,提交时间的信息
省略时间和修改用户的信息,查看日志

git log --pretty=oneline

在这里插入图片描述

  1. 返回之前的版本
git reset --hard HEAD^  #或者git reset --hard HEAD~1
代码解释
hard硬回退,无论是库还是本地库全部退回一个版本
HEAD指针,指向最新的版本
^几个^就表示往回退几个版本
~2数字表示从当前往前回几个版本

也可reset到remote的版本,用

git reset --hard origin/master
  1. 查询所有版本日志的版本号,退回
 # 查询
git reflog

在这里插入图片描述
红色框框中的是版本号

#退回
git reset --hard 版本号
  1. 编辑文件后,还原到库中最新一次commit的版本的文件
    (还原到暂存区的文件,即add后的文件,不是版本层面的还原,reset是还原版本)
$ git checkout -- 文件/文件名 

–后面的空格勿漏

  1. 删除库中的文件
    按照提交文件的操作类似,在文件夹删除文件后,git add, git commit
    在这里插入图片描述

物理结构

区域说明举例
工作区(Working Directory)用户电脑本地硬盘目录最新改过的代码
本地库(Repository)工作区有个隐藏目录.git,它就是Git的本地版本库有所有历史记录
暂存区(stage)一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)只有一份最新add进来的

在这里插入图片描述

分支branch管理

master是主干分支

  1. 返回当前branch和版本号
 git branch -v
  1. 新建一个branch
 git branch 分支名称

note:

  • 此时查询branch就会出现两个分支,版本都是一个版本

  • *和绿色字体表示用户当前所在的branch
    在这里插入图片描述

  1. 改变当前branch到另一个branch
 git checkout 要改的分支名称

在这个branch上做得改变,在回到其他分支上时,这些改变是没有的。

若把创建新branch和switch到这个新branch放在同一步,那么用

git checkout -b 新分支名称

也可传入origin上的分支,来建立新的分支

git checkout origin/分支名 -b 新分支名称

PS:
用git fetch 获取remote上分支信息(mate-data)

 git fetch origin 分支名称

在这里插入图片描述

  1. 把其他branch合并到master(任意branch都可)
    branch要回到要把其他文件合并的主branch上,再进行合并操作。
git checkout master
git merge dev

在这里插入图片描述

  1. 删除branch
    git branch -D 要删除的分支名称

冲突

冲突一般指同一个文件同一位置的代码,在两种版本合并时版本管理软件无法判断到底应该保留哪个版本,因此会提示该文件发生冲突,需要程序员来手工判断解决冲突。
在这里插入图片描述
由于conflict,从而命令行后缀会进入MERGING状态,表示此时是解决冲突的状态。
通过conflict的位置查看confict

vim boy.txt

在这里插入图片描述
该状态下对代码进行修改,最后不要忘记去掉标记。
再次git add 和git commit 提交后,后缀MERGING消失,说明冲突解决完成。。
在这里插入图片描述

也可以直接通过命令行查看不同再到文件中进行修改,接着add,commit

git diff

在这里插入图片描述

位置合并branchpull
head和===之间当前branch基于最新版本的改变自己的基于最新版本的改变
===和>>>之间另一个branch基于最新版本的改变remote基于最新版本的改变

github

GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务
在这里插入图片描述

1,2,6步骤上面的内容一致的,下面从3开始

3在GitHub搭建项目

在这里插入图片描述

4推送代码到远端

a. 增加远程地址
在这里插入图片描述

git remote add  远端代号   远端地址
名称说明
远端代号是指远程链接的代号,一般直接用origin作代号,也可以自定义。
远端地址默认远程链接的url
例子git remote add origin https://github.com/user111/Helloworld.git

note:可去.git/config中查看,修改远端代号,远端地址等

b. 推送到远程库

git  push   远端代号  本地分支名称
名称说明
远端代号是指远程链接的代号。
分支名称是指要提交的分支名字,比如master。
例子git push origin master

第一次push要github的账号和密码

5克隆代码

a. 下载下来的代码是自带git仓库的(不需要git init 初始化),直接克隆即可
克隆之前设置一下uers.name和user.email

git  clone   远端地址   新项目目录名
名称说明
远端地址指远程链接的地址。
项目目录名指为克隆的项目在本地新建的目录名称,可以不填,默认是GitHub的项目名(地址中.git前的内容)。命令执行完后,会自动为这个远端地址建一个名为origin的代号
例子git clone https://github.com/user111/Helloworld.git hello_world

b. 下载指定分支(若不指定则只下载主分支)

git clone -b 指定分支名称 远端地址   新项目目录名

c. 如果访问一个Git URL需要用法名和密码,可以在Git URL前加上用户名,并在它们之间加上@符合以表示分割,然后执行命令,git会提示你输入密码。示例如下

git clone Remi@http://www.kernel.org/pub/scm/git/git.git 新项目目录名

7git push到github

首先得是项目参与者,需要项目管理人员invitate
在这里插入图片描述

在这里插入图片描述
成为项目参与者后就能git push 成功了!

push过程中的几种情况(本地分支local_branch,远程分支 remote_branch),首先都需要本地切换到需要push的local_branch

  1. 远程已有remote_branch分支并且已经关联本地分支local_branch
   git push 远端代号 local_branch
  1. 远程已有remote_branch分支但未关联本地分支local_branch
 git push -u 远端代号/remote_branch local_branch
  1. 远程没有remote_branch分支并(这里,remote_branch为远端希望创建的分支名称)
git push 远端代号 local_branch:remote_branch

8git pull

git pull 远端代号   远端分支名
名称说明
远端代号指远程链接的代号。
远端分支名指远端的分支名称,如master。
例子git pull origin master

也可以到需要更新的目录下,直接

git pull

协作冲突

在上传(push)或同步(pull)代码时,由于你和他人都改了同一文件的同一位置的代码,版本管理软件无法判断究竟以谁为准,就会报告冲突,需要程序员手工解决。
这时,直接pull,并进入merge状态,需要手动修改后 git add, git commit.

在这里插入图片描述

fork

  1. 若一个第三方要push,需要先fork
  2. fork相当于做一个镜像,如此在自己的github库里操作与原先的库没有任何影响
    若不fork直接git clone 则最后会push失败
    在这里插入图片描述
  3. 在自己的github库中进行修改后,点击new pull request 申请对源代码的merge(需要经过原项目组的审查)
    在这里插入图片描述

Git 的优点

  1. 跟踪代码的版本记录,如记录代码做的改变,修改的时间等。
  2. 在不同人之间同步代码(通过pull,push,clone)
  3. 测试代码但不会丢失原来的版本
  4. 返回到之前任意一版的代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值