git安装地址
官方:git-scm.com/
镜像:npm.taobao.org/mirrors/git…
什么是Git?
Git的创造者是Linus
Git是免费的、分布式文件版本控制工具;
Git是目前最流行的版本控制工具 【版本控制:保留文件中修改的历史纪录,可以方便撤销和恢复之前对文件的修改】
Git在没有远程仓库的支持下仅是本地化管理
Git家族成员?
Git:一种版本控制系统,是一个命令,是一种工具;
Gitlib:是用于实现Git功能的开发库;
Github:是一个基于Git实现的远程代码托管仓库,向互联网开放【国外的git远程仓库,开源】;
Gitee:码云,国内远程代码托管仓库
Coding:国内的git远程仓库【开源】(如果这两个保存私密代码的话是收费的)
GitLab:是一个基于Git实现的远程代码托管仓库,一般应用于公司内网环境下;【企业版】
集成式与分布式的对比
集成式:需要连接中央仓库,需要网络
记录保存在中央仓库,一旦中央仓库内的数据丢失,没有备份
分布式:在每个人的电脑上都有一个.git本地仓库,操作记录都保存在本地
可无网络办公,等有网络再推送远程仓库
.gitignore
git放弃对指定文件的监控。
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
git原理图解
vim常用命令
后续会对vim命令进行补充
#进入编辑状态
i
#撤销上次操作
u
#退出并保存
Esc + :wq
git常用命令
git文件命令
# 目录切换
cd 文件夹
cd..
# 清空命令行
clear
# 新增文件夹
mkdir 文件夹名
# 新增文件
touch 文件名
vim 文件名 【并用 vim 模式打开该文件进行编写】【推出vim模式,并保存文件内容 Esc + :x】
printf 'content'>文件名 【新建一个文件,并把 content 写入文件内】
echo 'content'>文件名 【新建一个文件,并将content写入文件内】
# 删除文件夹
rmdir 文件夹名
# 删除文件
rm 文件名
# 查看文件内容
cat 文件名
# 查看当前文件的路径
pwd
# 查看该目录下的文件列表 【不包含隐藏文件】
ls
# 查看该目录下的文件列表 【包含隐藏文件】
ls -a
# 查看该目录下的文件详细信息
ls -l
设置用户信息及ssh密钥
# 设置全局用户名、邮箱
git config --global user.email '邮箱'
git config --global user.name '用户名'
# 设置本git仓库用户名、邮箱
git config --local user.email '邮箱'
git config --local user.email '用户名'
# 查看本地git的配置信息
git config -l
# 创建、查看ssh密钥
创建: ssh-keygen -t rsa -C '邮箱'
进入ssh : cd ~/.ssh
查看信息:ls 【查看一下是否有id_rsa和id_rsa.pub,.pub 文件就是公钥,另一个文件则是密钥。】
查看公钥:cat id_rsa.pub 【将公钥复制到gitlab或github的ssh处,就将本地和远程仓库连接上了】
基本命令
# git 查看版本
git --version
# 更新git
git update-git-for-windows
# init-初始化git仓库【git init会在项目文件夹下创建一个.git文件夹用来对本项目进行版本控制。】
# 初始化git仓库
git init
# 新建一个文件夹,并初始化git仓库
git init 文件名
# add-提交代码到暂存区
# 把当前目录所有未追踪文件,已修改的文件,添加到暂存区 (不包括被删除的文件)
git add .
# 提交指定文件到暂存区
git add 文件(夹)名
# 提交已修改的文件、被删除的文件(不包括新文件)
git add -u
# commit-提交代码到版本库
# 提交暂存区文件到本地git仓库
git commit -m "注释"
# 提交特定文件(夹)到本地git仓库
git commit 文件(夹)名 -m "注释"
# 合并add、commit写法
git commit -am "注释" 【不用每次先提交暂存再提交仓库】【只有之前被git管理过文件才可以使用】
# 提交代码到本地git仓库时,对代码不进行规则校验
git commit -m "注释" -n
# 利用本次commit修改上次的commit,但不会修改上一次的注释信息【git log不会新加commit记录】
git commit --amend --no-edit
# 利用本次commit修改上次commit的注释信息【git log查看,没有新加commit记录】
git commit --amend -m "注释"
# 查看版本库当前状态
git status
删除文件
# 删除文件,删除后也需要commit操作,删除真实文件
git rm 文件名
# 强制删除文件,如果文件git add了,但没有提交commit,是不让rm删除的,会报错,所以使用-f强制删除
git rm -f 文件名
# 只在版本库、暂存区中删除,不删除真实的文件,删除后需要commit
git rm --cache 文件名
查看日志
# 查看当前分支的历史记录
git log
# 查看每次提交的修改文件
git log --stat
# 查看指定次数的提交
git log -2 --pretty --oneline 【两次提交记录】
# 纪录本机电脑的每次操作
git reflog
# 查看上次提交的修改内容
git show
# 查看指定提交的修改内容
git show commitId
回滚、反选、撤销
撤销
撤销工作区
只在工作区进行了修改,还未提交到暂存区和版本库,也就是还未add和commit操作。
# 撤销指定文件的修改
git checkout -- 文件名
git restore -W 文件名
# 撤销此次修改的所有工作区文件
git checkout -- .
git restore -W .
# 使用最后一次提交版本中的指定文件替换工作区现在的文件
git checkout HEAD -- 文件名
git restore -s HEAD~1 文件名
# 使用指定的提交版本中的文件替换工作区现在的文件
git checkout CommitId -- 文件名
git restore -s CommitId 文件名
撤销暂存区
修改的文件已经提交到暂存区,未提交到版本库,add操作了,但还未commit操作。
# 撤销指定文件的add操作,使其变为不被跟踪状态
git reset HEAD 文件名
git restore -S 文件名
# 撤销所有文件的add操作
git reset HEAD .
git restore -S .
撤销版本库
文件已经提交到版本库,回退到暂存区状态
#撤销指定文件的提交版本库操作,回到暂存区
git reset --soft HEAD^
回滚
# 放弃改动
git reset
# 只版本回退,不会更新工作区
git reset HEAD^
# 回退到上一版本,回退后,git log就没有刚才的那个版本了,工作区的文件也会回退到上个版本
git reset --hard HEAD^
# 将版本库回退三个版本,不会修改暂存区和工作区
git reset --soft HEAD^^^
# 将版本库和暂存区回退到上4个版本,不会修改工作区
git reset --mixed HEAD~4
# 彻底将工作区、暂存区、版本库恢复到指定版本
git reset --hard CommitId
git reset --hard CommitId
版本回退,回退到指定版本,后边的commit提交也会删除
例子:版本1 -- 版本2 -- 版本3
git reset --hard HEAD^^ 版本回退两个版本,工作区、暂存区、版本库都会删除;git log查看历史记录,就只剩下版本1的一次提交信息。
版本回退之后,git push origin master会报错,无法提交到远程仓库。
使用git push -f origin master 强制推送代码,远程仓库也会删除掉版本2和版本3的提交记录。
使用git reset --hard回退了代码,怎么恢复到指定版本?
git reflog可以查看到回退的代码记录。
git reset --hard CommitId 回退到删除之前的指定版本。
反选
# git 会生成一个新的 commit,将指定的 commit 内容从当前分支上撤除
git revert CommitId
git revert CommitId版本反选,git revert是创建一个commit来覆盖当前的commit,指针向后移动
例子:版本1 -- 版本2 -- 版本3
单纯想要修改版本2,而不影响版本3。
git revert 版本2CommitId ,本地会将版本2及版本2之后的代码进行区分。
<<<<<<< HEAD
222222222222222222222222222
1111111111111111111111111
=======
>>>>>>> parent of cf21934... to#c33
需要手动进行代码修改。
查看版本改动
# 工作区和暂存区之间的差异对比
git diff
# 暂存区与版本库之间的差异对比
git diff --cached
# 工作区与版本库之间差异对比
git diff master
标签管理
# 新建一个tag在当前commit
git tag 标签名
# 新建一个tag在指定commit
git tag 标签名 commitId 例:git tag v0.9 4ab025
# 查看所有tag
git tag
# 查看与某标签之间的差距
git show 标签名
# 删除本地tag
git tag -d 标签名
# 删除远程tag
git push origin :refs/tags/标签名
分支
# 切换分支
git checkout 分支
git switch 分支名 【git 2.23版本发布】
# 创建一个新分支并切换到指定分支
git checkout -b 分支名
git switch -c 分支名 【git 2.23版本发布】
# 查看本地多有分支
git branch
# 当前分支重命名
git branch -m 分支名
# 新建一个分支,但不会自动切换到该分支上
git branch 分支名
# 新建一个分支,指定某一次commit
git branch 分支名 commitId
# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track 分支名 远程分支名
# 查看远程仓库的分支
git branch -r
# 查看本地分支和远程仓库分支
git branch -a
# 查看各个分支最后一次提交对象的信息
git branch -v
# 查看当前分支已经合并的分支
git branch --merged
# 查看没有合并到当前分支的分支
git branch --no-merged
# 删除指定分支,没有合并的分支不可以删除
git branch -d 分支名
# 强制删除指定分支,没有合并的分支也可以删除
git branch -D 分支名
# 删除远程分支
git push --delete origin 分支名
# 合并分支
git merge 分支名
远程仓库
# 查看远程主机名
git remote
# 查看更多远程信息
git remote -v
# 查看远程仓库地址
git remote show origin
# 关联远程仓库
git remote add origin 远程仓库地址
# 解除与远程仓库绑定关系
git remote rm 远程库地址
# 将本分支的内容提交到远程仓库指定分支上
git push 远程主机名 分支名 例:git push origin daily1
# 强制提交代码到远程仓库
git push -f origin 远程分支名
# 删除远程分支
git push --delete origin 分支名
# 从远程仓库拷贝数据
git clone 仓库地址
# 合并远程仓库代码到本地
git pull 远程主机名 分支名 例:git pull origin daily1
总结
git操作命令比较多,故做一篇笔记仅供大家查阅。
第一次写掘金,可能文章格式不是很正式,以后会随时改动。