Git笔记

Git

概念

  • Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型地各种项目。
  • Git易于学习、占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

何为版本控制

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

💌分布式的版本控制出现以后,解决了集中式版本控制系统的缺陷?

  • 服务器断网的情况下也可以进行开发(因为版本控制式在本地进行的)
  • 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

为什么要版本控制

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

Git工作机制

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

在这里插入图片描述

Git基本常用命令:

创建本地文件夹:mkdir <文件夹名>
创建本地文件:touch <文件名>
显示当前的目录:pwd
删除工作区文件:git rm <文件名>
移动或重命名工作区文件:git mv <源文件名> <改后文件名>

查看文件更改了什么内容:git diff <文件名>
查看历史:git log
回退到上一个版本:git reset --hard HEAD^100 或者 git reset --hard HEAD~100
	(如果想回退到100个版本,使用git reset --hard HEAD~100 )
查看XX文件内容:cat XX

git stash:把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list:查看所有被隐藏的文件列表
git stash apply:恢复被隐藏的文件,但是内容不删除
git stash drop:删除文件
git stash pop:恢复文件的同时 也删除文件

Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

  • 局域网
    • GitLab
  • 互联网
    • GitHub(外网)
    • Gitee码云(国内网站)

设置用户签名

💌签名的作用:
区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户名,否则无法提交代码。

注意:这里设置用户名签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

1.设置用户名:
git config --global user.name <用户名>
2.设置用户名邮箱:
git config --global user.email <用户名邮箱>
3.查看设置:
git config --list

文件状态

💌查看文件状态
查看所有文件状态:git status
查看指定文件状态:git status <文件名>
💌文件的四种状态

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified1.Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

历史版本

💌查看历史版本

  • git reflog 查看版本信息
  • git log 查看详细版本信息

💌版本穿梭

  • git reset --hard 版本号
    查看系统config: git config --system --list
    查看当前用户(global)配置: git config --global --list

注意:Git切换版本,低层其实是移动的HEAD指针,具体原型如下图
在这里插入图片描述
在这里插入图片描述

分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支,使用分支意味着程序员可用把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。(分支低层其实也是指针的引用)
💌分支的好处

  • 同时并行推进多个功能开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可

💌创建与合并分支
查看分支:git branch
查看远程分支:git branch -r
创建分支(但依然停留在当前分支):git branch <分支名>
创建并切换分支:git checkout –b <分支名>
切换分支:git checkout <分支名>
合并某分支到当前分支:git merge <分支名>
删除分支:git branch –d <分支名>
删除远程分支:
1.git push origin --delete <远程分支名>
2.git branch -dr [remote/branch]

💌删除分支

❗注意:不能删除当前分支,只能删除其他分支

git branch -d <分支名> : 删除分支时,需要做各种检查
git branch -D <分支名> : 不做任何检查,强制删除

💌冲突产生的原因
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个,必须人为决定新代码的内容。
简单来说:就假如我们分别在两个分支上修改同一个文件,分别提交致本地库,然后在其中一个分支里执行合并操作,发现不能合并
💌解决冲突
1.编辑有冲突的文件,删除特殊符号,决定要使用的内容

  • 特殊符号:
    • <<<<<<<HEAD 当前分支的代码
    • ========
    • 合并过来的代码:>>>>>>> 另一个分支名

2.添加到暂存区
git add 文件名
3.执行提交(注意:吃屎使用git commit命令时不能带文件名)
git commit -m "这里边写什么都可以"

❗注意:合并分支只会修改你合并的那个分支,不会修改合并过的分支

删除文件

💌git rm与git rm --cached:

  • 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用
git rm file_path
git commit -m 'delete somefile'
git push
  • 当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用
git rm --cached file_path
git commit -m 'delete remote somefile'
git push

团队内协作和跨团队协作

  • 团队内协作
    在这里插入图片描述
  • 跨团队协作
    在这里插入图片描述

配置Git忽略文件

  • Eclipse特定文件
    在这里插入图片描述
  • IDEA特定文件
    在这里插入图片描述
  • Maven工程的target目录

💌为什么要忽略他们?

  • 与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽开发工具之间的差异

💌怎么忽略?

  • 创建忽略规则文件xxxx.ignore(前缀名随便起,建议是git.ignore)
    这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig文件引用,建议也放在用户家目录下
    • git.ignore配置如下:
# Compiled class file
 
*.class
 
# Log file 
*.log
 
# BlueJ files 
*.ctxt
 
# Mobile Tools for Java (J2ME) 
.mtj.tmp/
 
# Package Files
 
*.jar 
*.war 
*.nar 
*.ear 
*.zip 
*.tar.gz 
*.rar
 
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 
hs_err_pid*
 
.classpath
 
.project
 
.settings
 
target
 
.idea
 
*.iml
  • 在.gitconfig文件中引用忽略配置文件(此文件在Windows的家目录中)
[core]
    excludesfile=忽略配置文件的路径

注意:这里要使用“正斜线( / )”,不要使用“反斜线( \ )”

配置SSH公钥

💌生成SSH公钥

  • ssh-keygen -t rsa
  • 不断回车
    • 如果公钥已经存在,则自动覆盖
  • Gitee设置用户公钥
    • 获取公钥

      • cat ~/.ssh/id_rsa.pub
        在这里插入图片描述
    • 验证是否配置成功

      • ssh -T git@gitee.com

操作远程仓库

git remote:查看远程库的信息
git remote –v:查看远程库的详细信息
git remote show <远程仓库>:显示某个远程仓库的信息
git remote rm <远程仓库名>:删除远程仓库
git remote rename <源仓库名> <改后仓库名>:修改仓库名

💌添加远程仓库
此操作是先初始化本地库,然后与已创建的远程库进行对接

  • 命令:git remote add <远端名称> <仓库路径>
    • 远端名称,默认是origin,取决于远端服务器设置
    • 仓库路径,从远端服务器获取此URL
    • 例如: git remote add origin git@gitee.com:mydercode/trytrytrytry.git

💌查看远程仓库

  • 命令:git remote

💌推送到远程仓库

  • 命令:git push [ -f ] [--set-upstream] [远端名称[本地分支名][:远端分支名]]
    • 如果远程分支名和本地分支名称相同,则可以只写本地分支
      • git push origin master
    • -f 表示强制覆盖
    • --set-upstream推送到远端的同时并且建立起和远端分支的关联关系
      • git push --set-upstream origin master
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
    • git push 将master分支推送到已关联的远端分支

💌本地分支与远程分支的关联关系

  • 查看关联关系我们可以用git branch -vv命令

💌从远程仓库克隆
如果已经有一个远端仓库,我们可以直接clone到本地

  • 命令:git clone <仓库路径> [本地目录]
    • 本地目录可以省略,会自动生成一个目录

💌从远程仓库中抓取和拉取
远程分支和本地分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取命令:git fetch [remote name] [branch name]
    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支
  • 拉取命令:git pull [remote name] [branch name]
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miss you ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值