Git从零到进阶(结合codewhy)

目录

0.快捷键

1.版本控制

2. Git的安装

3. Git的配置

4. 初始化仓库

5. 本地文件的状态

6. 常见的操作

7. 历史记录

8. 版本回退

9. 远程仓库

10. 身份认证

11. 添加远程的服务器

12. 问题的处理

 设置上游分支(跟踪分支)

 合并没有共同base分支

 Github

13. git tag

14. git的原理(git如何保存内容)

15. 分支结构

本地分支的使用

远程分支的操作

 git flow工作流

git rebase

16. Git中常见的命令总结

17.常见问题


0.快捷键

(1)  在vscode中ctrl+~键可以打开集成终端 在集成终端中tab键可以补全命令,alt加b可以直接打开浏览器。

(2)git commit忘记输入-m 提交信息怎么办?

输入i (即insert) 输入备注信息,输入完成之后 点击esc ,然后输入:wq或者两次大写Z 就退出回到命令界面了

1.版本控制

  (1)什么是版本控制?简单来说,版本控制在软件开发中,可以帮助程序员进行代码的追踪、维护、控制等等一系列的操作

  (2)集中式版本控制和分布式版本控制的区别

集中式全存在一个服务器上,这个服务器出问题就全完了。

   Git是属于分布式版本控制系统(Distributed Version Control System,简
称 DVCS)
   客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下 来,包括完整的历史记录; 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何 一个镜像出来的本地仓库恢复; 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份;

2. Git的安装

1.安装Git

Git的官网:https://git-scm.com/downloads

  • Git安装的几个工具:

    • Git bash  基本都用这个,它包括常用的cmd,增加了linux的命令

    • git cmd

    • git gui

3. Git的配置

第一次都要设置用户名和邮箱

  • git config --global user.name ""  

  • git config --global user.email ""

检测当前的配置信息: git config --list

4. 初始化仓库

  • 本地 git init  :该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的核心; 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪;

  • 远程 git clone

5. 本地文件的状态

现在我们的电脑上已经有一个Git仓库:
 在实际开发中,你需要将某些文件交由这个Git仓库来管理;
 并且我们之后会修改文件的内容,当达成某一个目标时,想要记录下来这次操作,就会将它提交到仓库中;
 那么我们需要对文件来划分不同的状态,以确定这个文件是否已经归于Git仓库的管理:
 未跟踪:默认情况下,Git仓库下的文件也没有添加到Git仓库管理中,我们需要通过add命令来操作;
 已跟踪:添加到Git仓库管理的文件处于已跟踪状态,Git可以对其进行各种跟踪管理;;
  • 已跟踪的文件又可以进行细分状态划分:
    •  staged:暂缓区中的文件状态;
       Unmodified:commit命令,可以将staged中文件提交到Git仓库
       Modified:修改了某个文件后,会处于Modified状态;
  • 查看文档状态

    • git status

6. 常见的操作

跟踪新文件命令:  git add aaa.j  使用命令 git add 开始跟踪一个文件

通过git add . 将所有的文件添加到暂存区中 .

现在的暂存区已经准备就绪,可以提交了。
每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了;
再运行提交命令 git commit;
可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行;
如果我们修改文件的add操作,加上commit的操作有点繁琐,那么可以将两个命令结合来使用
  • git commit -m ""

  • git commit -a -m ""

git忽视文件:

7. 历史记录

  • git log

    不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面;
    这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明;
  • git log --oneline 一行显示

  • git log --oneline --graph    英文状态下按q ,即可退出

8. 版本回退

如果想要进行版本回退,我们需要先知道目前处于哪一个版本:Git通过HEAD指针记录当前版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^;
如果是上1000个版本,我们可以使用HEAD~1000;
我们可以可以指定某一个commit id
  • git reset --hard HEAD^

  • git reset --hard HEAD~100

  • git reset --hard commitid

9. 远程仓库

什么是远程仓库(Remote Repository)呢?
目前我们的代码是保存在一个本地仓库中,也就意味着我们只是在进行本地操作;
在真实开发中,我们通常是多人开发的,所以我们会将管理的代码共享到远程仓库中;
git是分布式的版本管理系统,自己有一个本地仓库,还需要一个统一的远程仓库
  • GitHub

  • Gitee

  • gitlab: 自己搭建

10. 身份认证

  • https的账号密码凭证

  • ssh的公钥和私钥

ssh-keygen -t ed25519 -C “your email"
ssh-keygen -t rsa -b 2048 -C “your email

11. 添加远程的服务器

查看远程地址:比如我们之前从GitHub上clone下来的代码,它就是有自己的远程仓库的
git remote
git remote –v
-v是—verbose的缩写(冗长的)
添加远程地址:我们也可以继续添加远程服务器(让本地的仓库和远程服务器仓库建立连接)
git remote add <shortname> <url>
git remote add origin http://152.136.185.210:7888/coderwhy/gitremotedemo.g
重命名远程地址:
git remote rename gitlab glab
移除远程地址
git remote remove gitlab

12. 问题的处理

 设置上游分支(跟踪分支)

git fetch
git branch --set-upstream-to=origin/main

 合并没有共同base分支

git merge --allow-unrelated-histories

 Github

 GitHub创建远程仓库

# 初始化本地仓库
git init
​
# 添加远程仓库
git remote add origin xxxx
​
​
# 从远程仓库获取内容
git fetch
git branch --set-upstream-to=origin/main  //设置上游分支
git merge --allow-unrelated-histories
​
# git push
git config push.default upstream  //默认是master
​
# 换一种做法
git checkout main

常见开源协议:

13. git tag

git tag v1.0.0
​
git tag
​
git tag -d v1.0.0
​
# 将本地tag push远程仓库
git push origin v1.0.0
git push origin --tags   
​
# 删除远程的tag
git push origin -d v1.0.0

14. git的原理(git如何保存内容)

git add .
# .git/objects/00 40
​
git commit -m "aaa"
# .git/object/eb -> 提交信息/作者/tree
# .git/object/aa
# aaa.js -> 00
# bbb.js -> 40

15. 分支结构

本地分支的使用

创建分支

git branch testing
 切换分支
git checkout testing
# 创建并切换
git checkout -b testing

合并分支

git checkout master
git merge testing

查看所有的分支

git branch
​
# 删除本地分支
git branch -d testing

远程分支的操作

# 初始化本地仓库
git init
​
# 添加远程仓库
git remote add origin xxxx
​
​
# 从远程仓库获取内容
git fetch
git branch --set-upstream-to=origin/main
git merge --allow-unrelated-histories
​
# git push
git config push.default upstream
​
# 换一种做法
git checkout main

推送一个远程分支:

git push origin develop
​
# 李四操作
git checkout develop

删除远程分支

git push origin -d develop

 git flow工作流

第一图:

  • master: 记录主要的版本

  • develop: 开发版本

  • topic: 新主题

第二图:

  • master: 记录主要的版本

    • tag

  • hotfix: 热修复

    • merge master

    • merge develop

  • develop: 开发分支

  • release: 上线的分支

    • merge master

    • merge develop

  • feature: 新特性

git rebase

  • 改变某一个分支base, 目的让log的历史记录更加的简洁

  • 黄金原则: 不要在主分支中使用rebase

16. Git中常见的命令总结

基础的命令: (必须掌握)

git clone xxxxxxxx
​
git add .
git commit -m "xxxx"
​
git pull ->(git fetch + git merge)
git push

进阶的命令:

  • main

  • develop

  • feature

git checkout develop
# 1.检查服务器是否有origin/develop这个分支
# 2.创建一个本地的develop分支
# 3.让本地的develop分支自动跟踪origin/develop
# 4.切换到develop分支
​
git add .
git commit -m ""
git pull
git push

高级的命令:

git tag
​
git checkout -b develop
git push origin develop
​
git merge develop
git rebase

17.常见问题

(1)在master分支开发到444,这个333是一个打了tag为v1.0.0的版本,这个版本出现了bug,怎么开启另一个分支去解决?

1.要回退版本,git reset --hard <commitId>  用git show v1.0.0找到这个版本的id 进行回退

2.这个时候master指针也到了这个版本,为了后面合并他得回去,git reflog展示所有操作,找到id进行回退

3.创建分支git branch testing ,切换分支 git checkout testing 修复bug

4.合并分支,先回到master 再git merge testing ,最后再提交

(2)不是克隆的代码如何与远程仓库连接,相当于从无到有

1.先创建本地仓库 git init

2.添加远程仓库,并且命名origin 

git remote add origin https://gitee.com/ggbond33/remote_branch.git 相当于建立了通道,但本地不知道远程到底有什么分支 

3.执行git fetch origin master,让本地去远程取你要的分支,在本地有了origin/master分支

4.git branch --set-upstream-to=origin/master  设置上游分支,本地的master和origin/master产生了联系,即branch 'master' set up to track 'origin/master'.

5.把main和origin/master合并,但是它们没有共同祖先,所以执行git merge --allow-unrelated-histories ,也不用指明merge谁 因为master已经追踪origin/master了

6.然后再git push

如果本地仓库是master而远程仓库是main是比较复杂的,看codewhy的视频,创建成名字相同比较好点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值