git的学习条记

[复制链接]
发表于 2024-12-1 23:36:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一,git的安装

   mac电脑的安装
  1. xcode-select --install
复制代码
   windows安装,用指令麻烦一些
  随便找个视频观看看教程,去官网下载就可以了。 
    centos安装
  1. sudo yum install git -y
复制代码
   ubuntu安装
  1. sudo apt-get install git -y
复制代码
   检察git安装的版本
  1. git --version
复制代码
二,git的基本概念

   工作区:是在电脑上你要写代码或⽂件的⽬录
  暂存区(stage  /   index):add之后的代码会放在这里
  版本库(repository):存放已经commit的过的代码,然后形成一个版本
  HEAD:指向分支,分支就是当前在工作的分支
  长途主机名默认为:origin
  三,git的基本操纵

   cd到想要建立堆栈的文件夹内里去,然后输入指令创建堆栈
  1. git init
复制代码
   设置用户名
  1. git config --global user.name "输入你的用户名字"
复制代码
设置邮箱所在
  1. git config --global user.email "输入你的邮箱地址"
复制代码
此中上面两个指令 --global 是⼀个可选项。假如使⽤了该选项,表⽰这台机器上全部的 Git 堆栈都会使⽤这个配置。假如你盼望在不同堆栈中使⽤不同的 name 或 e-mail ,可以不要 --global 选项,但要留意的是,执⾏命令时必须要在堆栈⾥。
    检察配置的用户名和邮箱
  1. git config -l
复制代码
    删除用户名和邮箱
  1. git config [--global] --unset user.name
  2. git config [--global] --unset user.email
复制代码
假如添加时加了 --global ,则删除的时间也要加。
    添加文件到暂存区
  1. git add 文件名1 文件名2 ...  //添加一个或多个
  2. git add .     //添加当前⽬录下的所有⽂件改动到暂存区:
复制代码
   将暂存区内容添加到当地堆栈中
  1. git commit -m "描述本次提交"  //提交暂存区全部内容到本地仓库中
  2. git commit 文件名1 文件名2 ... -m "描述本次提交"   //提交暂存区的指定⽂件到仓库区:
复制代码
   打印提交日记
  1. git log      //可以加上    --pretty=oneline   就可以让每次提交都只打印一行
复制代码
    在.git文件内里检察文件
  1. git cat-file -p commit的id
复制代码
   检察在你上次提交之后是否有对⽂件进⾏再次修改:修改是对于工作区和暂存区是否相同,假如是修改过的文件名会被打印出来
  1. git status
复制代码
   这段指令是上一个指令中假如被修改了,用这段指令可以检察修改了哪些内容:检察暂存区和工作区的差别
  1. git diff 文件名
  2. //这个是扩展,如果查看版本库和⼯作区⽂件的区别
  3. git diff HEAD -- 文件名
复制代码
   检察HEAD指针的移动历史
  1. git reflog
复制代码
   版本回退
  1. git reset [--soft | --mixed | --hard] [HEAD]
复制代码
每个选项的解说
  --soft: 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
  --mixed: 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,⼯作区⽂件保持不变。
  --hard: 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,以是使⽤该参数前⼀定要慎重。
  HEAD:三种写法
  1.  HEAD 表⽰当前版本 ,HEAD^^ 上上⼀个版本
  2. HEAD~0 表⽰当前版本,HEAD~2 上上⼀个版本
  3. 写成版本号,就是 git log 打印的版本号 ,或者是 git reflog
打印的内容。
  
    撤销修改
  环境一:对于⼯作区的代码,还没有 add​​​​​​​
  1. git checkout -- 要撤销的文件名
复制代码

  环境⼆:已经 add ,但没有 commit
  方法1:
  1. //先输入
  2. git reset HEAD 文件名
  3. //在输入
  4. git checkout -- 文件名
复制代码
方法2:
  1. git reset --hard HEAD 文件名
复制代码
环境三:已经 add ,并且也 commit 了
  前提条件是cmmit之后没有push操纵
  1. git reset --hard HEAD^
复制代码
    删除版本库的文件
  方法1:
  1. //第一步
  2. rm 文件名
  3. //第二步
  4. git add 文件名
  5. //第三步
  6. git commit -m “描述内容”
复制代码
方法2:
  1. //第一步,在工作区和缓存区删除文件,然后接下来在提交到版本库
  2. git rm 文件名
  3. //第二步
  4. git commit -m “描述内容”
复制代码
四,分支管理

   检察全部的分支
  1. git branch
复制代码
   创建一个分支名为branch_name的分支
  1. git branch branch_name
复制代码
    切换到名为branch_name的分支
  1. git checkout branch_name
复制代码
    创建并切换到branch_name的分支
  1. git checkout -b branch_name
复制代码
   合并冲突:
  原因:分付出去的内容被改变,且原支路也被改变,以是造成了合并冲突
  处理惩罚方法:merge冲突,需要手动解决,并进行一次性提交
  留意:提交非常的紧张
    Fast-forward模式:在合并的时间没有合并冲突
   非Fast-forward模式:在合并的时间有合并冲突
    将分支branch_name合并到当前分支:合并后分支还在
  1. git merge branch_name
复制代码
假如写成如许:意思是假如是Fast-forward模式的merge,也会在用git log --graph --abbrev-commit也会画出分支图来,假如不加就是跟普通提交一样,都会表现是在一条主线上面提交一次代码。
  1. git merge --no-ff -m "描述这次提交" branch_name
复制代码
因为在合并冲突这个场景下:也需要再提交一次,以是需要添加-m "描述这次提交"。
    删除当地堆栈的branch_name分支:留意只能在其他的分支上删除branch_name分支
  1. git branch -d branch_name       //注意这里只有merge之后的分支才可以这样删除
复制代码
   用图画出git的管理过程:可以清楚的看见git分支合并的过程
  1. git log --graph --abbrev-commit
复制代码
bug分支 

这里我们把在开辟代码的分支叫做:kaifacode
把修复bug的分支叫做:dbug
意思是假如在开辟中已经在新建立的分支上面已经在工作区写了一段代码了,这时间主版本出现了bug,这时间我们建议新建立一个分支去解决bug,然后bug改完然后合并到主版本内里,假如新开辟的代码已经写完了,需要合并,这时间直接把新开辟的代码合并到主分支会产生合并冲突,以是这里建议不要直接把代码合并到主分支,先把主分支的代码合并到开辟的分支内里来,然后再把合并的代码合并到主分支。
   上面的解决方案中我们显然遇到了一个问题,我们在kaifacode写代码是写在工作区的,我们这时也没有提交代码,但是我们这个时间要归去修复主分支内里的bug,这时间工作区又有代码,以是我们需要储存这段代码,然后在新的分支修复bug
  1. git stash
复制代码
然后我们这个时间我们用 git status
指令看工作区就是干净的了,然后我们就去修复bug即可,修复完之后,我们需要规复之前的之前在工作区开辟的新代码,在规复新代码之前我们先看下面这条指令
  1. git stash list
复制代码
这时间我们就可以看见我们用 git stash指令储存的代码了
  规复原来已经开辟好的代码用下面这条指令:意思是规复的同时会把 stash 也删了
  1. git stash pop
复制代码
下面的这段指令进行规复,但是规复代码并不会删除stash的内容
  1. git stash apply
复制代码
我们还要继续删除stash的内容的话,我们的就要执行下面的一段指令
  1. git stash drop
复制代码
我们都规复完之后就可以接着写代码了
    逼迫删除分支:假如我们在开辟的过程中建立了一个新的分支,但是这时间忽然不想要这个分支了, 我们是无法用之前删除分支的指令进行删除这个分支的,我们要用逼迫删除分支的指令如下
  1. git branch -D branch_name
复制代码
删除分支名为branch_name的分支 
  五,长途操纵 

   把长途堆栈克隆到当地来(留意不要再恣意的当地堆栈内里执行这条命令)
  1. git clone 仓库的网络地址
复制代码
   检察长途堆栈的一些信息,并且另有我们自己的权限是否能推送和拉代替码
  1. git remote -v
复制代码
   把当地的代码推送到长途堆栈
  1. git push <远程主机名> <本地分⽀名>:<远程分⽀名>
复制代码
# 假如当地分⽀名与长途分⽀名相同,则可以省略冒号:
  1. git push <远程主机名> <本地分⽀名>
复制代码
   假如长途堆栈已经被别人修改,我们这时间需要用这条指令来拉取远层堆栈的代码
  1. git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
复制代码
# 假如长途分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
  1. git pull <远程主机名> <远程分⽀名> 
复制代码
   假如长途堆栈没有这个分支,我们当地新建立了一个分支,可以把这个分支推送到长途堆栈。(留意如许推送过去的分支,好像和当地的分支不会建立毗连)
  1. git push origin 要推送的分支名    //和上面的一样,只是少了远程仓库的分支名
复制代码
   忽略文件:.gitignore
  我们可以创建一个忽略文件可以让git不追踪我们不需要维护的文件
  文件的内容格式如许写:
  1.   # 代表表明
  2.  *.os 代表以os结尾的文件不能被追踪
  3.  !a.os 代表 a.os文件不需要被忽略,以是!表示不能被忽略的文件
    逼迫推送:因为我们可能有想add的文件字母结尾已经在gitignore文件内里被忽略,但是我们又想把文件add进入缓存区,这时间我们就需要用到逼迫添加了,指令如下
  1. git add -f 文件名
复制代码
   检查gitignore文件:假如我们要添加文件的时间可能add不了,这时间可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,⽐如说 a.so ⽂件是要被添加的,可以⽤下面的命令检查
  1. git check-ignore -v 文件名
复制代码
 然后文件名记得写上后缀示例:git check-ignore -v a.so
   假如回显    .gitignore:3:*.so a.so   代表在gitignore文件的第三行出现了*.so使a.so文件不能被添加。
  六,标签管理 

可以更好的用于版本的管理
   检察有哪些标签
  1. git tag
复制代码
   切换到需要打标签的分⽀上,给最近提交的版本添加标签
  1. git tag 标签名
复制代码
   给之前提交的版本打标签
  我们要找到之前commit的id值,先用  git log --pretty=online --abbrev-commit 找到commit的id值
  在用下面的指令打标签
  1. git tag 标签名字 索引值
复制代码
   打标签的时间并添加上描述
  1. git tag -a 标签名 -m “描述的内容” 要打标签的索引(这个选项不加的话就选择的是最近一次提交的版本)
复制代码
   检察打标签的版本的内容
  1. git show 标签名
复制代码
   删除打的标签
  1. git tag -d 标签名
复制代码
   把标签名推送到长途堆栈
  1. git push 远程主机名 要推送的标签名
复制代码
推送全部的标签名进入长途堆栈
  1. git push 远程主机名 --tags
复制代码
   在长途堆栈删除标签
  先正常用上面的指令在当地删除
  然后在用下面的指令
  1. git push 远程主机名 :删除的标签名
复制代码
留意上面的‘  :  ’ 必须要写,因为:的前面是当地的标签的意思:背面代表长途的标签 
   七,多人协作

 场景1:
条件:在一个分支上协作完成
先在长途堆栈上建立一个分支,一台机器在这个分支添加一段代码,另一台机器也在这个分支添加一段代码。 
   我们可以先用 git branch 检察当地的分支,然后在用 git branch -r 指令检察在当地的在长途堆栈的的分支,先把长途堆栈克隆到当地,然后我们在长途堆栈中创建新的分支,在拉取到当地来就可以了
  1. git pull
  2. //这里可以直接拉取,是因为我们是克隆的仓库,远程的master和本地的master分支
  3. 已经建立了连接所以我们这里后面不在需要跟一些配置信息
复制代码
我们在把长途的分支添加到当地来:就是当地堆栈和长途堆栈建立毗连 
  1. git checkout -b 建立的分支名 origin/dev(对应的远程仓库的分支)
复制代码
我们可以检察当地的分支和长途的分支分别有哪些
  1. git branch -a
复制代码
检察当地堆栈和长途堆栈是怎么建立毗连的
  1. git branch -vv
复制代码
 小知识点:建立过毗连的分支就可以直接用短命令了如:git push,git pull 
  
  假如已经建立好了当地的分支,这时间我们可以把这个分支与长途堆栈建立毗连
  1. git branch --set-upstream-to=origin/dev 本地的分支名
  2. //                         远程主机名/远程分支名
复制代码
假如长途堆栈已经被修改了,当地也已经commit了一次,这时间需要先pull一次,然后有冲突解决冲突,然后就可以推送到长途堆栈即可。
     长途分⽀删除后,当地 git branch -a 依然能看到的解决办法
  当前我们已经删除了长途的⼏个分⽀,使⽤   git branch -a   命令可以检察全部当地分⽀和长途分⽀,但发现很多在长途堆栈已经删除的分⽀在当地依然可以看到。
  1. git remote show origin       //可以查看remote地址,远程分⽀,还有本地分⽀与之相
  2. 对应关系等信息。
复制代码
然后根据我们上面的指令打印出来的内容的提示,输入以下指令,我们可以在当地的长途堆栈实现删除gitee(长途堆栈) 上面已经删除的分支
  1. git remote prune 远程主机名    //这样就删除了那些远程仓库不存在的分⽀
复制代码
然后当地堆栈内里要删除分支前面已经讲过了。
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-12 23:35 , Processed in 0.217625 second(s), 32 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表