Git命令随记

246 阅读9分钟

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原理图解

image.png

vim常用命令

后续会对vim命令进行补充

#进入编辑状态
i

#撤销上次操作
u

#退出并保存
Esc + :wq

git常用命令

git文件命令

# 目录切换
cd 文件夹
cd..

# 清空命令行
clear

# 新增文件夹
mkdir 文件夹名

# 新增文件
touch 文件名
vim 文件名   【并用 vim 模式打开该文件进行编写】【推出vim模式,并保存文件内容 Esc + :xprintf '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操作命令比较多,故做一篇笔记仅供大家查阅。
第一次写掘金,可能文章格式不是很正式,以后会随时改动。