Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。
git底层采用的是SHA-1校验,保证提交的正确性,文件内容以及文件、目录、版本、标签和提交的关联,都通过安全的加密哈希校验算法(SHA1)保护。这可以避免代码和修改历史被不小心或者恶意改变,并且保证修改历史完全可追迹。
git基于多种传输协议,为了数据传输安全最常用的就是https和ssh,设置ssh密钥的目的是为了节省输入用户名密码的过程,同时保证传输安全,并不是必须设置。
Git不只提取最新版的文件快照,而是把代码仓库完整的镜像下来
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 形成索引 。如果下次文件的内容未发生变化就会产生指针对上一次文件进行指向,内容发生变化后才会重新保存,称为快照流,各个版本之间形成的历史记录也就是每次快照之间指针指向的父子关系(链表形式)
# 查看版本
git --version
Git 的配置文件在用户主目录下的一个隐藏文件.gitconfig
中
通常情况下,每台计算机上只需要配置一次 Git,当 Git 程序升级时会保留配置信息。 可以在任何时候再次通过运行 git config
命令来修改它们。
git config [param]
项目仓库级别配置
git config --global [param]
当前系统用户级别配置,配置文件在user文件夹下
param参数如下
user.name "天宇龙腾"
user.email [email protected]
让 Git 显示不同的颜色,会让命令输出看起来更醒目
git config --global color.ui true
配置命令别名
git config --global alias.st status
git config --global alias.last 'log -1'
cd ~
回到用户目录下
git init
git clone <url> (--depth 1)
git add .
git commit -m "message"
git status
# 将暂存区的文件推送至远程仓库
# 使用强制推送'-f'是因为一般新建仓库的时候会生成Readme.md文件,导致需要先git fetch才能推送,但这个readme文件其实是不需要的
# 因为在生成本地项目的时候一般也会生成一个readme文件,所以直接强制推送过去
git push origin master -f
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交
git commit --amend
# 列出远程连接
git remote -v
# 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器(连接git远程仓库)
# origin 是远程仓库地址的别名,取什么名字都可以,你也可以在 push 时将你喜欢的名字替换origin
git remote add origin <url>
# 删除某个远程连接
git remote rm <name>
# 重命名别名
git remote rename <old-name> <new-name>
远程仓库与本地仓库这两个独立仓库想要初次建立完毕想要进行合并时,先在本地初始化连接远程完毕后拉一下远程库,并合并一下两个独立仓库的历史
git pull origin master --allow-unrelated-histories
git push origin master:master
git rm <filename>
git rm --cached <filename>
通过.gitignore
文件屏蔽某些不必要上传的文件
*.txt
git checkout <hashIndex> <filename>
git中创建新分支,类似于新建一个指针,切换分支就是将HEAD指针指向另一个分支
Git Flow 分支种类
master
主干分支
develop
开发分支
hotfix
修复分支
release
准生产分支(预发布分支)
feature
功能分支
git branch -v
- 切换分支到master主分支
git checkout master
- 对所需dev分支进行合并
git merge dev
git branch -D <name>
git branch -d <name>
git remote -v
git log
git log --pretty=oneline
git log --oneline
HEAD@{N}
指针移动步数(截取部分索引展示)git reflog
git reset --hard <hashIndex>
git reset --hard HEAD^^^
git reset --hard HEAD~3
hard是硬回退,工作区、暂存区与本地库都会进行回退(用的最多)
mixed 暂存区、本地库会进行回退,工作区不动
soft 本地库会进行回退,工作区、暂存区不动
git 以行为单位做对比,改动时为删除一行,增加一行
比对工作区与暂存区内容
比对单个文件差异
git diff xxx.file
比对所有文件差异
git diff
比对暂存区与本地库的差异
git diff HEAD xxx.file
有时某些文件必须放于git工作目录中但是不选择提交,使用.gitignore
文件进行忽略追踪
忽略文件的原则是:
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 排除相应文件夹文件:
dictionary
# 添加例外规则 !+文件名,不排除.gitignore和App.class:
!.gitignore
!App.class
检查相应忽略文件的规则,便于修改.gitignore
文件规则
git check-ignore -v App.class
强制添加被忽略的某一个文件
git add -f App.class
git再次忽略某个文件后同步github更新,首先,删除本地缓存。
git rm -r --cached dir #要删除的目录m
然后,提交修改。
git push
非本组织团队对远程仓库进行协同工作时需要先 fork
到复制一份到自己的仓库,再clone
下来,编写完毕后向远程仓库发起 pull request
请求,由远程仓库管理员审核后进行 merge
合并操作
git fetch origin master
git checkout origin/master
git merge origin/master
git fetch
git pull
发布一个版本时,我们通常先在版本库中打一个标签(tag
),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
由于commit
号过于繁琐,所以自定义一个标签名便于查找,所以,tag
就是一个让人容易记住的有意义的名字,它跟某个commit
绑在一起。
# 选择一个分支
git branch
git checkout master
# 打标签
git tag v1.0
# 对指定的commit id打标签(使用git log查出)
git tag v0.9 fb8b190
# 查询标签
git tag
# 查看指定标签信息
git show v0.9
# 删除标签
git tag -d v0.1
# 推送指定标签到远程库
git push origin v1.0
# 一次性推送全部本地标签
git push origin --tags
github1s
https://gitpod.io/#/xxx
git clone https://github.com/...
git clone https://github.com.cnpmjs.org/...更换镜像加快速度
--depth 1按深度拿最近一次更新的
在仓库中按 。
可直接跳转到VScode中