Git一文通关

Git一文通关

1. 基本概念

1.1 仓库(Repository)

仓库的意思,即你的项目,你想在GitHub上开源一个项目,那就必须要新建一个仓库,

1.2 收藏(Star)

仓库主页Star按钮,意思为收藏项目的人数

1.3 复制克隆项目(Fork)

将项目复制克隆到本地,该Fork项目是独立存在的

1.4 发起请求(Pull Request)

Pull Request是基于Fork的,本地Pull到远程仓库的Request

1.5 关注(Watch)

关注项目,更新会收到提醒

1.6 事务卡片(Issue)

发现代码bug,提问题用

2. git安装

2.1 下载网址

https://git-scm.com/download/
如果只是下载window版本可以访问 gitforwindows.org
如果官网下载太慢 可以访问 https://npm.taobao.org/mirrors/git-for-windows/
进入后,选择你想要的版本,它里面是 降序排序。

2.2 安装

直接点击下一步

3. 工作流程图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

4. 工作区,暂存区,版本库/本地仓库

  1. 工作区: 包含.git文件夹的目录就是工作目录,主要用于存放开发的代码,我们日常开发打开的目录就是工作区目录
  2. 暂存区: .git文件夹中有很多文件, 其中有一个index文件就是暂存区, 也可以叫作stage,暂存区是一个临时保存修改文件的地方
  3. 版本库/本地仓库: 前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息,日志信息和文件本部信息等目录
  4. 总结: 工作区 包含 本地仓库 , 本地仓库 包含 暂存区

5. 工作目录下的状态

  1. Untracked 未跟踪/未被纳入版本控制
  2. Tracked 已跟踪/被纳入版本控制
  3. Unmodified 未修改状态
  4. Modified 已修改状态
  5. Staged 已暂存状态
  6. new file 新添加的文件
    以上这些状态会随着执行Git命令发生变化

6. 常见的托管服务/远程仓库

前面我们已经知道Git中存在两种类型的仓库,即本地仓库和远程仓库,那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub,码云,GitLab等

  1. GitHub(地址:https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub
  2. 码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比GitHub,码云速度会更快,一般企业用此.
  3. Git (地址: https://about.gitlab.com/)是一个仓库管理系统的开源项目,使用GIt作为代码管理工具,并在此基础上搭建起来的web服务,一般用于企业,学校等内部网络搭建git私服.比如使用一台电脑作为远程仓库. 安全性要求高, 用此
  4. 此次学习用的也是码云仓库

7.码云的使用

  1. 登录https://gitee.com/
  2. 新建仓库
    a. 点击右上角的+新建
    b. 输入仓库名称,仓库的路径也会自动填充为仓库名称的值
    c.仓库介绍 非必填
    d. 是否开源 目前只能选择私有, 如果要开源,需要在仓库创建好后,去[仓库设置]修改, 具体为 进入仓库->管理->勾选开源以及仓库公开须知->保存
    e. 选择[设置模板]-[Readme文件], 这里只是为了便于教学, 真实项目上不要勾选这个,因为每次提交都会提示Readme文件冲突,要先解决冲突才能上传
    f.点击[创建]
  3. 查看仓库
    a. 方式一: 点击中上方的[我的],选择查看具体的仓库或者点击[全部]查看所有的仓库, 注意会另开一个页面
    b. 方式二: 点击左上角的[gitee]图标,回到首页, 点击[仓库]查看,里面可以看到公开的仓库和私有的仓库
  4. 添加成员
    前面已经在码云上创建了自己的远程仓库,目前仓库成员只有自己一人(身份为管理员),在企业实际开发中,一个项目往往是由多个人共同开发完成的,为了使多个参与者都有权限操作远程仓库, 就需要邀请其他项目参与者成为当前仓库的成员, 操作为: 进入仓库->管理->仓库成员管理->添加仓库成员

8. Git配置环境

当安装Git后首先需要做的事情是设置用户名和email地址,这是非常重要的,因为每次Git提交都会使用该用户信息,配置文件路径: C:\Users\23346.gitconfig, 即/.gitconfig,目录是在打开终端时默认出现的目录

  1. 设置用户名和email地址
git config --global user.name "fuxuejiang"
git config --global user.email "2334600753@qq.com"

通过上面的命令设置的信息会保存在~/.gitconfig文件中
家目录~的组成: C:\Users\电脑用户
查看用户: win+r,输入netplwiz,注意如果是用邮箱作为用户,那么只会截取前5个数字作为用户别名
2. 查看配置信息

git config --list
git config user.name

9.获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git本地仓库
通常有两种方式:
在本地初始化一个Git仓库
从远程克隆

  1. 在本地初始化一个Git仓库
    a. 在电脑的任意位置创建一个空目录,也可以不是空目录,例如想把已有工程交给Git管理,作为我们的本地Git仓库
    b. 进入这个目录中, 点击右键打开Git bash窗口,注意: 不能在vscode中进行
    c. 执行git init命令,如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹),则说明Git仓库创建成功
    注意: 本地初始化一个Git仓库, .git隐藏文件夹是在git init命令执行的目录下,该目录就是工作区,可以执行git 命令

  2. 从远程仓库克隆
    可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
    git clone https://gitee.com/fuxuejiang/my-git_364.git
    第一次进行clone, 会提示需要输入用户名和密码,之后就不需要了,因为保存的Git账号密码会存入Windows凭据中:
    控制面板\用户帐户\凭据管理器->Windows凭据->普通凭据
    如果账号或者密码输入错了,则删除凭据,再输入
    码云上的仓库地址查看:
    进入仓库->代码->克隆/下载->选择对应的协议地址,这里使用HTTPS
    注意: 从远程仓库克隆得到一个Git仓库, .git隐藏文件夹是在git clone命令执行的目录下的克隆的项目的名称目录下, 所以git clone命令执行的目录并不是工作区, 不能执行git 命令, 需要进入克隆的项目名称目录内才是工作区, 才能执行git命令.

10. 操作本地仓库

10.1. 查看本地仓库的状态

git status

10.2. 添加到暂存区

git add . 所有修改的文件
git add a.txt 具体的文件名
然后查看本地仓库的状态
git status

10.3. 取消已跟踪(只对新增的文件有效,修改的无效)

git reset a.txt
git status

10.4. 提交代码到本地仓库

git commit -m "添加了一个a.txt文件"

10.5. 修改代码后提交

//添加修改后的文件 到 暂存区
git add a.txt
//把暂存区内容 提交到 本地仓库
git commit -m "更新了a.txt文件"

如果本地仓库中已经有了该文件,那么add和commit可以合并为一步,否则会提示要先add

git commit -a -m "再次更新了a.txt文件"

10.6 查看日志文件

//查看所有日志文件(远程仓库日志,本地仓库日志),结果很详细,但不会记录git reset的历史
git log
//查看本地仓库日志,结果更简略,且会记录git reset的历史,常用
git reflog
类似于
git log --oneline

10.7 根据日志恢复到历史版本

//查看日志版本号 7位即可
git reflog
或者
git log --oneline
//恢复到历史版本,不放弃历史版本之后的修改,对修改的内容进行了保留
git reset 82e748f (版本号)
//查看本地仓库状态
git status
发现Changes not staged for commit:,no changes added to commit (use "git add" and/or "git commit -a"),说明保留了更改的内容,查看文件内容,发现也还保留着最新的内容,并不是恢复到了历史版本对应的内容

//恢复到历史版本,放弃历史版本之后的修改,包括工作区的修改,对修改的内容不保留,不常用,因为会把工作区代码搞丢
git reset --hard 82e748f (版本号)
HEAD is now at 82e748f 添加了一个a.txt文件

//查看本地仓库状态
git status
发现nothing to commit, working tree clean,说明没有保留更的内容, 查看文件内容,发现确实没有保留最新的内容,恢复到了历史版本对应的内容

注意:

  1. git reset 或者 git reset --hard 都是可以恢复到任意版本,且即使使用了git reset --hard 恢复到某一个版本,仍然可以使用git reset --hard恢复到该版本之前或者之后的任意版本
  2. 只有不删除.git隐藏文件夹,都可以回退到任意版本,因为.git仓库中保留了所有版本
  3. 如果不小心删除了.git本地仓库,那么可以从远程仓库clone一份下来

10.8 删除本地仓库文件,删除后必须提交才能生效

  1. 注意直接删除工作区里的文件是无法删除本地仓库里对应的该文件的,因为再次获取的时候,又会出现,除非在工作区删除之后, 再commit了
  2. 删除本地仓库文件方式为:
//删除工作区的文件
git rm a.txt
//添加到暂存区
git add a.txt
//删除后必须提交
git commit -m "删除了文件a.txt"

10.9 添加文件到忽略列表

  1. 一般我们总会有一些文件无需纳入Git的管理,也不希望他们总是出现在未跟踪文件列表.通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等, 在这种情况下, 我们可以在工作目录中创建一个名为.gitignore的文件(文件名固定),列出需要忽略的文件模式,下面给出一个示例:
## Java template
*.class

# Mobile Tools for Java(J2ME)
.mtj.tmp/

# Packge Files
*.jar
*.war
*.ear
*.zip
#Virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.idea

*.iml

*.bak
*.class
*.rar
*.log
.project
.settings
.classpath
target
classes
lib
*.DS_Store
.gradle
build
out
log
  1. 如何验证.gitignore文件中的忽略是否生效
    通过修改对应的文件,然后查看 git status 看是否会出现文件发生了修改
    或者
    通过增加对应的文件,然后查看 git status 看是否会出现文件发生了新增

11 操作远程仓库

11.1 添加远程仓库,如果是克隆下来的,这一步不需要

//git remote add <远程仓库名称> <远程仓库地址> 
//添加一个新的远程Git仓库,同时指定一个可以引用的简称,例如origin
//remote 远程仓库
//origin: 远程仓库在本地的名称,可以使用origin指代后面的地址
//https://gitee.com/fuxuejiang/my-git_364.git 远程仓库地址
git remote add origin https://gitee.com/fuxuejiang/my-git_364.git

11.2 查看远程仓库

//查看远程仓库在本地的别名
git remote
//查看远程仓库的详细信息
git remote show origin(使用上一步查出的别名)

11.3 将本地仓库代码推送到远程仓库

当你想分享你的代码时,可以将其推送到远程仓库

//git push <远程仓库名> <远程仓库分支名>
git push origin master

11.4 从远程仓库克隆

如果你想获得一份已经存在了的Git仓库的拷贝,这时就要用到git clone命令,Git克隆的是该Git仓库服务商的几乎所有数据(包括日志信息,历史记录等),而不仅仅是复制工作所需要的文件. 当你执行git clone命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来.
任意创建一个空文件夹,点击git bash here, 克隆远程仓库的命令格式是 git clone <远程仓库地址>

//git clone <远程仓库地址>
git clone https://gitee.com/fuxuejiang/my-git_364.git

11.5 从远程仓库拉取

  1. git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge
//从码云 上获取代码到本地仓库,没有自动进行代码合并
PS C:\Users\23346\Desktop\test2\my-git_364> git fetch origin master
From https://gitee.com/fuxuejiang/my-git_364
 * branch            master     -> FETCH_HEAD //当前所在分支
   508b43f..f5cd696  master     -> origin/master //fetch下来的分支
//合并代码
PS C:\Users\23346\Desktop\test2\my-git_364> git merge origin/master
Updating f5cd696..5d3e9ef
Fast-forward
 a.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  1. git pull 是从远程仓库获取最新版本并merge到本地仓库,从输入命令后的提示也可以看出, git pull = git fetch + git merge
PS C:\Users\23346\Desktop\test\my-git_364> git pull origin master
From https://gitee.com/fuxuejiang/my-git_364
 * branch            master     -> FETCH_HEAD
   5d3e9ef..3706107  master     -> origin/master
Updating 5d3e9ef..3706107
Fast-forward
 a.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

11.6 解决冲突

上一个知识点的拉取和获取,都是基于一个用户修改了,另一个用户获取代码.
特殊情况,一个用户修改代码推送到远程仓库, 但是另一个用户并没有拉取其修改后的版本, 而是在上一个版本基础上修改代码提交到本地仓库, 并推送到远程仓库,此时就会提示要先git pull
整体的操作步骤:

1. git pull origin master
2. 手动修改a.txt中的冲突代码
3. git add a.txt
4. git commit -m "模拟李四 解决代码冲突问题"
5. git push origin master

解决冲突的过程可以从[统计]->[仓库网络图]中看出:
张三和李四都从[模拟李四 更新a.txt文件]节点更新了同一个文件,从而产生了冲突,产生了两个冲突的版本,最后李四解决了冲突,形成了一个版本
在这里插入图片描述

具体操作提示:

PS C:\Users\23346\Desktop\test2\my-git_364> git push origin master
To https://gitee.com/fuxuejiang/my-git_364.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/fuxuejiang/my-git_364.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
PS C:\Users\23346\Desktop\test2\my-git_364> git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 308 bytes | 30.00 KiB/s, done.
From https://gitee.com/fuxuejiang/my-git_364
   3706107..cab85d7  master     -> origin/master
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt //自动merge 发现存在冲突,需要手动合并
Automatic merge failed; fix conflicts and then commit the result.
//a.txt 存在冲突
aaa
<<<<<<< HEAD //本地仓库的
张三6666
李四6668
=======
张三66668
李四666
>>>>>>> cab85d7ffedbfcd8eba125379ed3b625374669b4 //远程仓库的

手动修改冲突后,查看git status

PS C:\Users\23346\Desktop\test2\my-git_364> git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution) //提示需要 git add
        both modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

git add .,并查看状态

PS C:\Users\23346\Desktop\test2\my-git_364> git add .
PS C:\Users\23346\Desktop\test2\my-git_364> git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge) //提示需要 git commit

Changes to be committed:
        modified:   a.txt


11.7 移除远程仓库,远程仓库还在,只是把本地和远程仓库断开连接了

//查看远程仓库
git remote
//移除远程仓库
git remote rm origin(查看远程仓库命令查出来的)
//再次查看远程仓库,验证是否移除
git remote

11.8 推送到远程仓库的异常(了解)

本地仓库的代码想推送到一个新的远程仓库,而新的远程仓库中有一些文件,例如两个READEME.md文件. 例如将 my-git_364 仓库的代码 推送到 mygit_364_2的远程仓库

推送是被拒接

PS C:\Users\23346\Desktop\test\my-git_364> git push origin2 master
To https://gitee.com/fuxuejiang/my-git_364_2.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/fuxuejiang/my-git_364_2.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

这属于是两个不相关的分支的合并,解决方法:
获取远程仓库到本地, 合并不相干的分支, 再推送到远程仓库
整体的操作步骤:

1. git pull origin2 master --allow-unrelated-histories
2. 手动修改README.en.md 和 README.md 中的冲突代码
3. git add .
4. git commit -m "解决代码冲突问题"
5. git push origin2 master

具体操作提示:

//错误的演示 没有添加- -allow-unrelated-histories 
PS C:\Users\23346\Desktop\test\my-git_364> git pull origin2 master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.80 KiB | 141.00 KiB/s, done.
From https://gitee.com/fuxuejiang/my-git_364_2
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin2/master
fatal: refusing to merge unrelated histories
//正确演示
PS C:\Users\23346\Desktop\test\my-git_364> git pull origin2 master --allow-unrelated-histories                                               
From https://gitee.com/fuxuejiang/my-git_364_2
 * branch            master     -> FETCH_HEAD
Auto-merging README.en.md
CONFLICT (add/add): Merge conflict in README.en.md
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

推送成功后的仓库网络图:
可以看到, 有两个Initial commit ,第一个是myGit_364的, 第二个是myGit_364_2的,两者之间的部分是myGit_364的, 绿色的线代表了myGit_364_2, 红色代表myGit_364, ,推送后, 版本还是跟着myGit_364的版本线走的
在这里插入图片描述

12. 分支

几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改,开发新的功能,以免影响主线开发, Git的master分支不是一个特殊分支, 它跟其他分支没有区别. 之所以几乎每个仓库都有master分支, 是因为git init命令默认创建它, 并且大多数人懒得去修改它.

12.1 查看分支

//查看本地分支
git branch
PS C:\Users\23346\Desktop\test\my-git_364> git branch
* master

//查看远程分支
git branch -r
PS C:\Users\23346\Desktop\test\my-git_364> git branch -r
  origin/master
  origin2/master

//查看所有分支
git branch -a
PS C:\Users\23346\Desktop\test\my-git_364> git branch -a
* master //带星号表示本地活跃分支
  remotes/origin/master //带remotes 表示是远程分支
  remotes/origin2/master //带remotes 表示是远程分支

12.2 创建分支

//创建本地新分支,此时,远程仓库是没有该分支的
git branch b1(分支名)
//查看本地分支
git branch
PS C:\Users\23346\Desktop\test\my-git_364> git branch
  b1
* master //带星号表示本地活跃分支

//查看远程分支
git branch -r
PS C:\Users\23346\Desktop\test\my-git_364> git branch -r
  origin/master
  origin2/master

12.3 切换分支

//切换到b1分支
git checkout b1
PS C:\Users\23346\Desktop\test\my-git_364> git checkout b1
Switched to branch 'b1'
//查看本地分支
PS C:\Users\23346\Desktop\test\my-git_364> git branch     
* b1 //带星号表示本地活跃分支
  master
//修改a.txt文件,在b1分支进行commit,并提交到本地仓库
git commit -a -m "在b1分支修改了a.txt"
//切换回master分支, 查看master分支下, a.txt文件内容并未受影响
PS C:\Users\23346\Desktop\test\my-git_364> git checkout master
Switched to branch 'master'

12.4 分支推送至远程仓库

//把b1分支推送到远程仓库的b1分支,如果远程仓库没有该分支,会自动创建
//注意:此时必须处于b1分支上
git push origin b1
//实操
PS C:\Users\23346\Desktop\test\my-git_364> git push origin b1
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 12 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1.87 KiB | 1.87 MiB/s, done.
Total 11 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for 'b1' on Gitee by visiting:
remote:     https://gitee.com/fuxuejiang/my-git_364/pull/new/fuxuejiang:b1...fuxuejiang:master
To https://gitee.com/fuxuejiang/my-git_364.git
 * [new branch]      b1 -> b1

12.5 合并分支

本地分支的目标达成后, 即开发好后, 分支的数据可以直接合并到本地主分支上, 例如: b1合并到master分支
注意: 分支合并后, 分支还是存在的, 只是数据合并到主分支上了

//将b1分支数据 合并到master分支上
//注意: 此时必须处于master分支上
git merge b1
//实操
PS C:\Users\23346\Desktop\test\my-git_364> git checkout master
Switched to branch 'master'
PS C:\Users\23346\Desktop\test\my-git_364> git merge b1
Updating b1e23b9..5b7abd7
Fast-forward
 a.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
//然后查看a.txt文件

12.6 删除本地分支

在本地分支的数据合并到本地主分支后,如果有必要的话, 本地分支就可以进行删除了
分支是指向提交的指针。
Git 分支是从特定时间点开始的项目及其更改的快照。
在处理大型项目时,有包含所有代码的主存储库,通常称为main或master。
分支允许您创建原始主要工作项目的新的、独立的版本。您可以创建一个分支来编辑它以进行更改、添加新功能或在尝试修复错误时编写测试。一个新的分支可以让你在不以任何方式影响主代码的情况下做到这一点。
总而言之 - 分支让您可以在不影响核心代码的情况下更改代码库,直到您完全准备好实施这些更改。
这有助于您保持代码库整洁有序。
因此,您已经创建了一个分支来保存要在项目中进行的更改的代码。
然后,您将该更改或新功能合并到项目的原始版本中。
这意味着您不再需要保留和使用该分支,因此删除它是一种常见的最佳做法,以免它弄乱您的代码。

//删除本地分支
git branch -d b1(本地分支)
//实操
PS C:\Users\23346\Desktop\test\my-git_364> git branch -d b1
Deleted branch b1 (was 5b7abd7).

我们刚刚使用的删除本地分支的命令并非在所有情况下都有效。
如果分支包含未合并的更改和未推送的提交,则该-d标志将不允许删除本地分支。
这是因为任何其他分支都看不到提交,并且 Git 正在保护您免于意外丢失任何提交数据。
如果你尝试这样做,Git 会显示一个错误,提示分支没有完全合并.
正如错误所暗示的那样,您需要改用该-D标志:
-D带有大写-- delete --force字母D(它是 的别名)的标志会强行删除本地分支,无论其合并状态如何。
但请注意,您应该谨慎使用此命令,因为没有提示要求您确认您的操作。
仅当您绝对确定要删除本地分支时才使用它。
如果您没有将其合并到另一个本地分支或将其推送到代码库中的远程分支,您将面临丢失所做的任何更改的风险。
//删除远程分支
远程分支与本地分支是分开的。
它们是托管在远程服务器上的存储库,可以在那里访问。这与本地分支相比,本地分支是本地系统上的存储库。
删除远程分支的命令是:
git push remote_name -d remote_branch_name
git branch您可以使用该命令删除远程分支,而不是使用用于本地分支的git push命令。
然后您指定遥控器的名称,在大多数情况下是origin.
-d是删除标志,是--delete.
remote_branch_name 是要删除的远程分支
//实操
PS C:\Users\23346\Desktop\test\my-git_364> git push origin -d b1
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/fuxuejiang/my-git_364.git
 - [deleted]         b1

当然, 也可以在Gitee等托管平台删除非默认的master分支置之外的所有分支
在这里插入图片描述

13.Gitee查看提交记录

在这里插入图片描述
![(https://img-blog.csdnimg.cn/2c8b0118b8764d3089f266ce0d08c739.png)

在这里插入图片描述

14. 在Idea中配置Git

安装号Idea后, 如果Git安装在默认路径下,那么idea会自动找到安装git的位置,如果更改了Git的安装路径则需要手动配置Git的路径, 选择 File ->Settings 打开设置窗口, 找到Version Control下的git选项:
点击Test按钮, 出现版本号, 说明Git配置成功.
在这里插入图片描述

15 在Idea中操作Git

练习场景如下:

  1. 由组长,基于本项目创建本地仓库,创建远程仓库, 推送项目到远程仓库.(真实环境: 项目经理创建空的项目推送, 然后逐步添加内容, 提交并推送)
  2. 每一位组员从远程仓库克隆项目到idea中, 这样每位同学在自己电脑上就有了一个工作副本, 可以正式开始开发了, 我们模拟两个组员(组员A, 组员B), 克隆两个工作区
  3. 组员A修改工作区, 添加到暂存区, 提交到本地仓库, 如果需要分享代码给另一个组员, 推送到远程仓库, 组员B就可以直接从远程仓库获取代码, 组员B可以获取组员A推送的代码.
  4. 组员A和组员B对同一文件进行修改, 提交到本地, 这时, 需要分享代码给其他组员, 组员A推送代码到远程仓库, 组员B也推送代码到远程仓库, 由于两位组员修改了同一个文件, 推送失败
    解决办法: 需要先获取远程仓库的代码到本地仓库, 编辑解决冲突, 提交并推送代码
  5. 组员A接到组长命令, 要对某功能进行重大的实验性调整
    操作思路: 创建分支B1, 切换到分支B1, 在B1分支上进行代码调整, B1分支达到预期目的后, 可以合并到原来的主干撒花姑娘, B1分支没有达到预期, 可以继续调整, 也可以直接删除分支, 切换到原来的分支继续开发. 如果其他组员对主干上代码进行过调整, 在合并时会产生冲突, 先编辑解决冲突, 在提交并推送.

15.1 创建Git本地仓库

在这里插入图片描述
在这里插入图片描述

15.2 添加.gitignore文件到工作区,也就是项目根目录下,也就是与.git本地仓库同级的目录

在这里插入图片描述

15.3 将文件添加到暂存区并push

第一次push, 需要填入gitee的账号和密码
push成功后,右下角会有提示:
Pushed master to new branch origin/master
如果是更新,则提示:
Pushed 1 commit to origin/master
在这里插入图片描述
在Commit之前, 记得把代码检查的两个勾选去掉, 否则很耗时,而且还可能出错
如果调出这个设置:
写了 init : 初始化项目 上面有个 设置 按钮
在这里插入图片描述

15.4 对比文件的修改部分

提交窗口中的文件右键, 选择[Show Diff]
在这里插入图片描述

15.5 从远程仓库克隆仓库到本地

方式一:
先File->Close Project 回到主页面, 然后点击[Projects]->[Get from VCS]
在这里插入图片描述
在这里插入图片描述
方式2:
idea内部打开: Git->clone
在这里插入图片描述

15.6 pull代码

拉取成功后, 右下角会有提示:
All files are up-to-date
在这里插入图片描述

15.7 解决代码冲突

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决完冲突后, 点击Apply, 右下角会提示需要再次push

Push rejected Push was canceled, because there were conflicts during the update. Check that conflicts were resolved correctly, and invoke push again.

在这里插入图片描述

15.8 查看提交记录

在这里插入图片描述

15.9 新建分支

在这里插入图片描述

15.10 合并分支 例如: 合并B1到master上

  1. 先通过右下角的分支按钮找到master分支,然后checkout
  2. 再通过右下角的分支按钮找到B1分支, 然后选择 Merge B1 into Master, 到这一步, 只是完成了本地仓库的合并,接下来还有push到远程仓库

15.11 恢复到任意历史版本

在这里插入图片描述

16 总结:

  1. 版本的控制是基于本地仓库和远程仓库的, 冲突是因为本地仓库某一行或多行的内容与远程仓库对应位置的内容不一致导致的, 而不是工作区的内容与远程仓库内容不一致导致的, 这也是为什么工作区内容有变化, 如果没有commit或者stash , 就直接pull会报错, 提示要先commit 或者stash, 然后再pull, 因为git认为工作区的内容可能会对本地仓库产生影响, 而git的控制是基于本地仓库和远程仓库的, 所以会有这种提示
  2. 虽然冲突是发生在本地仓库, 但是由于发生冲突时, 本地仓库的代码与工作区的代码是完全一致的, 所以修改工作区的代码就是修改本地仓库的代码,
  3. idea认为, 只要是解决冲突, 都不用重新commit, 直接push即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值