git

git

 

什么是git

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

git安装

Git的官网:https://git-scm.com/downloads;根据自己的操作系统来下载安装

BASH-CMD-GUI

Bash: Unix shell 的一种,Linux 与 Mac OS X 都将它作为默认 shell。

  • Git Bash 就是一个 shell,是 Windows 下的命令行工具,可以执行 Linux 命令;

  • Git Bash 是基于 CMD 的,在 CMD 的基础上增添一些新的命令与功能;

  • 所以建议在使用的时候,用 Bash 更加方便

Git CMD: 命令行提示符(CMD)是 Windows 操作系统上的命令行解释程序,当你在 Windows 上安装 git 并且习惯使用命令行时,可以使用 cmd 来运行 git 命令.

Git GUI: 基本上针对那些不喜欢黑屏(即命令行)编码的人,它提供了一个图形用户界面来运行 git 命令

git配置

 

配置选项

安装Git后,要做的第一件事就是设置你的用户名和邮件地址;这一点很重要,因为每一个 Git 提交都会使用这些信息,

它们会写入到你的每一次提交中,不可更改; 如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息;

git config --global user.name '****'
git config --global user.email '***@***.com'

git 服务器验证

http凭证存储

 

ssh密钥

 

git指令

检查当前配置信息

git config --list

git别名

Git 并不会在你输入部分命令时自动推断出你想要的命令;如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。

git config --global alias.co checkout;
git config --global alias.br branch;
git config --global alias.co commit;
...

初始化本地仓库

我们需要一个Git来管理源代码,那么我们本地也需要有一个Git仓库, 通常有两种获取 Git 项目仓库的方式.

  • 方式一:初始化一个Git仓库,并且可以将当前项目的文件都添加到Git仓库中(目前很多的脚手架在创建项目时都会默认创建一个Git仓库)

  • 方式二:从其它服务器 克隆(clone) 一个已存在的 Git 仓库(第一天到公司通常我们需要做这个操作)

方式一: 初始化Git仓库

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

方式二: 从Git远程仓库

git clone https://github.com/october/react-ts.git

检测文件状态

git status

常用的git指令

通用指令

git add . //将所有文件添加到暂存区 
git add bbb.js //单独将这个bbb.js文件添加到暂存区

git commit -m "提交信息" //文件更新提交在本地仓库
git commit -a -m "提交信息" //git add . + git commit

//提交代码到远程仓库
git push //默认情况下是将当前分支(比如master)push到origin远程仓库的分支(master),
     相当于git push origin master:master === git push origin master, 这种情况必须要保证推送的本地分支和远程分支名字一致,否则会报错

//拉取远程仓库代码
git pull //相当于git fetch + git merge(rebase)

git log //查看提交的历史
git log --pretty=oneline --graph //可以看到分支结构

//查看远程地址
git remote
git remote –v

//添加远程地址
git remote add <shortname> <url> //shortname是这个git仓库的简称
git remote add gitlab http://152.136.185.210:7888/coderwhy/gitremotedemo.git

//重命名远程地址
git remote rename gitlab glab

// 移除远程地址
git remote remove gitlab

tag指令

//创建标签(tag)
git tag v1.0 //轻量标签
git tag -a v1.1 -m "额外信息" //附注标签-通过-a选项,并且通过-m添加额外信息

//默认情况下,git push 命令并不会传送标签到远程仓库服务器上
//在创建完标签后你必须显式地推送标签到共享服务器上,当其他人从仓库中克隆或拉取,他们也能得到你的那些标签
git push origin v1.1
git push origin --tags

//删除本地标签
git tag -d v1.1

//删除远程tag
git push origin --delete v1.1

//检出tag
git checkout v1.1

回退(reset)指令

git reset  --hard 2d44982 //版本回退, 2d44982是commit id
git reset --hard HEAD^ //回退上一个版本

分支指令

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

//合并分支
git merge master
//查看当前所有的分支
git branch 
//同时查看最后一次提交
git branch –v
// 查看所有合并到当前分支的分支
git branch --merged
//查看所有没有合并到当前分支的分支
git branch --no-merged

//删除当前分支
git branch –d hotfix
//强制删除某一个分支
git branch –D hotfix

//推送分支到远程
git push origin <branch>
//跟踪远程分支
git --track <remote>/<branch>
//如果你尝试检出的分支 (a) 不存在且 (b) 刚好只有一个名字与之匹配的远程分支,
那么 Git 就会为你创建一个跟踪分支 git checkout --track <remote>/<branch> //删除远程分支 git push origin --delete <branch>

rebase

// rebase有一条黄金法则:永远不要在主分支上使用rebase
// rebase可以简化提交的git历史记录,使git保持一条线
//本地处于develop分支上开发了代码,想让它跟主分支(master)保持一条线
//做法:
git rebase master //在当前分支(develop)上rebase,让master分支作为develop的基底,相当于把develop这条分支剪下来放到master分支后面,
git merge develop //再合并develop分支上的修改

 

常见问题

1.在本地开发了一个项目,想把它推到远程仓库上去,这时还没创建远程仓库,这时去创建了一个,拿到远程仓库的地址跟本地仓库建立了链接,想把本地仓库的代码推到远程仓库触发的一系列问题

 

原因:当前分支没有和远程的origin/master分支进行跟踪;在没有跟踪的情况下,我们直接执行pull操作的时候必须指定从哪一个远程仓库中的哪一个分支中获取内容

git pull origin master

或者直接给当前分支设置一个上游分支

git branch --set-upstream-to=<remote>/<branch>
git branch --set-upstream-to=origin/master

 

git merge --allow-unrelated-histories

问题三:推送本地代码到远程仓库失败

 

//这是因为git push的默认配置是simple,它找的是当前的本地分支名称跟远程分支名称必须要保持一致,然而我上面本地分支是master,远程的分支是main;
//可以修改push的默认配置为upstream,这样找的就是设置的上游分支了,而不是找一模一样的名字
git config push.default upstream
//还可以修改push的默认配置为current,这样找的就是当前分支
git config push.default current

//查看修改后的信息
cat .git/config

//开发时最好本地的分支跟远程的分支保持一致,就不会出现这个问题
 
posted @ 2023-05-05 23:59  江上雪  阅读(16)  评论(0编辑  收藏  举报