当前位置:   article > 正文

git的使用指南(自用)

git的使用指南(自用)

安装

        git网站直接下载

下载比较慢

windows:Git-2.44.0-64-bit.exe

一路默认

linux

sudo apt-get install git

设置一下名字和email地址

  1. $ git config --global user.name "Your Name"
  2. $ git config --global user.email "email@example.com"

功能

创建版本库

获取要git的文件夹地址:例如D:\project\my_project

git init

使用git init命令创建仓库,并会生成一个.git文件

git只能追踪文本文件比如代码,网页,txt等而像视频,图片甚至ms word这种二进制文件是无法具体追踪的

注意:尽量不使用微软自带的txt编辑工具

在创建仓库的目录下D:\project\my_project写一个readme.md文件为例,放入仓库中

  1. # 添加到仓库
  2. git add readme.md
  3. #提交
  4. git commit -m "wrote a readme file"

版本回退

可以修改readme文件--> git add -->git commit -->修改readme文件--> git add -->git commit

反复做几个版本

git log 

查看更改记录

如何回退到第一个版本呢

图片中的HEAD表示当前版本,所以上一个是HEAD^,上上个是HEAD^^,上100个是HEAD~100

所以回退到上一个版本就是:

git reset --hard HEAD^

也可以直接回退到哪个版本的id

git reset --hard  60e4583db96cbd1daccc9656218f3e65ffc55352

 但是这样出现一个问题,就是只剩下那个版本之前的记录了,也就是时空穿越回过去但是却回不来了,靠之前的id吗?也可以但是太麻烦了

git reflog

可以查看自己的每一次的操作命令

此时可以看到之前的ID是6aeefdf,同时你也发现ID那么长其实只需要前几位就可以回溯了

工作区和暂存区

当然不做改动工作区就是干净的,暂存区就是先不断收集修改行为,然后一起commit到仓库中

而且commit只是把暂存区的行为添加到仓库,而无法提交工作区的修改

Git管理的是修改,而不是文件

撤销工作区的修改

使用:

git checkout --readme.md

这样把工作区的readme.md状态重新恢复到上一次commit或add的状态

删除文件

为了更深的理解checkout看这个例子的应用

删除文件后使用git status 查看状态:

会发现deleted:    readme.md,但是此时如果是误删,那么可以用版本库的文件即暂存区或仓库最近的版本恢复,也是使用:

注意空格:

git checkout -- readme.md

如果确实是要删除,那么删除后使用git add<file>的效果和直接使用git rm <file>的效果一样,因为删除也是一种修改

远程仓库

添加远程仓库(github

首先在github创建一个新的空仓库,老感觉不带梯子卡卡的

按照说明把之前的本地仓库同步过去

报错:fatal: unable to access 'https://github.com/CscZhang/HelloGit.git/': Failed to connect to github.com port 443 after 21082 ms: Couldn't connect to server

只需要刷新 DNS 解析缓存即可:

ipconfig/flushdns

然后再输入:

  1. git remote add origin git@github.com:michaelliao/learngit.git
  2. git branch -M main
  3. git push -u origin main

 其中,最后的-u是第一次不仅仅push,而且还完成了关联的操作

然后做了修改直接git push

报错: Failed to connect to github.com port 443 after 21094 ms: Couldn't connect to server

关了代理试试

从远程仓库克隆

git clone不赘述了

分支管理(重要)

创建与合并分支

为什么创建分支,将产品的功能分发给多个人做,然后将测试稳定的功能合并到主干上

即,HEAD指向当前分支,master(我的是main)指向主分支

创建分支并切换到这个分支:

  1. git switch -c dev
  2. #等同于
  3. #创建 git branch dev
  4. #切换 git switch dev

git branch命令查看当前分支:
 

git branch

星号则为当前分支

合并:

 git merge dev

合并完成后就可以删除分支了:

git branch -d dev

使用git branch查看是否删除成功

合并发生冲突

先分别在两个分支下做不同的修改,此时快速合并就失效了,那么可以通过git status发现改变,更好的是直接打开发生冲突的修改的文件会有很清晰的标示说明冲突

非常清晰

通过下面这个加参可以看到明显修改

git log --graph --pretty=oneline --abbrev-commit

stash功能

主要是理解这个功能的意义和作用,它的作用就是在你修改分支写一半时不想写时也不想commit时,就会用stash储存到一个文件里单独放到一个地方,之后也不上传,但是这样有丢的风险,具体意义的话还理解不够透彻

git stash
  1. git stash list
  2. #恢复并删除:
  3. git stash pop
  4. #恢复:
  5. git stash apply
  6. #删除:
  7. git stash drop

cherry-pick功能

不需要重新操作一次,直接把修bug的操作复制过来

git cherry-pick 4c805e2

有些聪明的童鞋会想了,既然可以在main的分支issue01上修复bug后,在feature分支上可以“重放”这个修复过程,那么直接在dev分支上修复bug,然后在master分支上“重放”行不行?当然可以,不过你仍然需要git stash命令保存现场,才能从dev分支切换到master分支。

 删除分支

  1. $ git branch -d feature-vulcan
  2. error: The branch 'feature-vulcan' is not fully merged.
  3. If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

但是没有合并的话,git会要求你使用 -D来确认删除

多人协作-推送分支

查看远程库的信息

  1. git remote
  2. #更详细的
  3. #git remote -v

使用-v的话可以看到推送和抓取的地址:

推送分支,就是commit到分支的所有修改的操作要同步到远程库时:

可以:

  1. #git push <远程库> <要推送的本地分支名称>
  2. git push origin main
  3. #或者
  4. #git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • main分支是主分支,因此要时刻与远程同步;

  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

 多人协作-抓取分支

一样的git clone就可以了

但是会发现这样只是抓取了main的分支,而没有feature,需要再抓取一次:

git checkout -b feature

回顾一下: 

 多人协作-分支冲突

当另一个user git clone并做了修改后想要push到远程仓库,出现错误:

因为远程仓库的内容被其他user做了修改,这时两个人的修改出现了冲突

提示:更新被拒绝,因为您当前分支的尖端落后于其远程对应分支。如果您想集成远程更改,请在再次推送之前使用 'git pull'。详情请参阅 'git push --help' 中的“关于快速前转的说明”。

按照提示将远程仓库版本的分支抓取下来,然后本地合并解决冲突

  1. # git pull <remote> <branch>
  2. git pull origin feature

注意:直接使用git pull是会出错的,因为没有链接本地feature与远程库的feature的分支,需要:

  1. git branch --set-upstream-to=origin/feature feature
  2. git pull

然后再git push自己的修改

 这样会导致提交历史不是一条直线,对于有强迫症的人来说也可以使用

git rebase

 来使得提交历史是一条直线:

  1. #查看:
  2. git log

然后再推送到远程仓库

打标签

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

git tag <tag_name> <id>

没有id默认是对最新的一次commit打标签 

  1. #查看所有标签
  2. git tag
  3. #查看具体标签信息
  4. git show <tag_name>

也可以加上说明文字:

 git tag -a v0.1 -m "version 0.1 released" 1094adb

 

同时发现,可以给一个commit打两个标签 

  1. #删除标签
  2. git tag -d v0.1

标签只存在于本地不会推到远程仓库,除非把特定标签推到远程仓库

 git push origin v1.0

或者把所有标签都推到远程仓库:

 git push origin --tags

删除远程仓库的标签比较麻烦:

  1. #先删除本地的
  2. git tag -d v0.1
  3. #再推到远程
  4. git push origin :refs/tags/v0.1

最后

本文大概由自身学习路线出发学习精简集合一些心得体会所作总结,难免有错误之处希望指正!

最后git学起来很快但还是要有需求去使用,附廖雪峰老师的指令表:git-cheat-sheet (gitee.io)

参考 

1.廖雪峰老师博客:期末总结 - 廖雪峰的官方网站 (liaoxuefeng.com)

2.git网络出现问题:Git报错: Failed to connect to github.com port 443 解决方案-CSDN博客

3.冲突问题:hint: Updates were rejected because the tip of your current branch is behind(git push线上与本地版本冲突问题)-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/473796
推荐阅读
相关标签
  

闽ICP备14008679号