git 常用命令记录

好记性不如烂笔头,记录一些常用命令,示例分支以master和dev为例,以下所有命令在git version 2.22.0.windows.1版本上测试通过。另外,推荐一个网址: https://git-scm.com/book/zh/v2

1. git 命令查看

git help -a
git --help

2. git 两个概念:工作区和暂存区

工作区:  git init 创建的代码库的所有文件但不包括 .git文件(版本库)
暂存区:  通过git add 操作添加的修改,都进入到暂存区了,通过git status可查看

可以认为:一个文件被修改了,git add之前它在工作区,git add之后它在暂存区

3. 上传本地项目到远程git仓库

先需要创建远程仓库,然后本地打开git bash,执行命令行
初始化git仓库: git init
将文件添加至暂存区: git add .
提交:git commit -m "提交描述"
关联到远程仓库:git remote add origin 远程仓库地址
推送到远程仓库:git push -u origin master

4. 克隆远程项目到本地

克隆项目: git clone 远程仓库地址
克隆项目master分支:git clone -b master 远程仓库地址
克隆某个tag:git clone -b tag-name 远程仓库地址

5. git 配置相关

git config --list    // 查看配置信息
git config --global core.safecrlf false   // 去掉git add 命令后 出现的一堆CR LF提示信息
git config --global credential.helper wincred   // 存储凭证(可用于输入一次用户密码后,有时候会老是提示输入用户名和密码)
git config --global alias.ci commit      // 为commit命令设置别名ci
git config user.name "francis"       // 配置用户名为francis
git config user.email  "francis@163.com"      //  配置邮箱

6. git 分支相关:

创建分支: git branch dev
切换分支: git checkout dev
创建并切换分支: git checkout -b dev
更新master分支到当前分支:git rebase master
合并master分支到当前分支:git merge master
删除分支: git branch -d dev
强制删除分支:git branch -D dev
列出所有分支: git branch / git branch -a / git branch -r 
查看各个分支最后一次提交: git branch -v
查看哪些分支合并入当前分支: git branch –merged
查看哪些分支未合并入当前分支: git branch –no-merged
查看状态或修改: git status
将修改添加至暂存区: git add  单个文件名  或  git add .   ( 添加所有文件)
提交: git commit -m '提交描述'
更新远程库到本地: git fetch origin
创建并切换分支(根据远程dev内容创建): git checkout -b dev origin/dev
推送分支:git push origin dev
取远程分支合并到本地: git merge origin/dev

git stash     // 把修改内容缓存起来,有时切换分支时会提示先保存修改,可使用此命令
git stash list    // 查看stash了哪些存储
git stash pop   // 将stash中的内容恢复到当前目录,将缓存堆栈中的对应stash删除
git stash apply    // 将stash中的内容恢复到当前目录,不会将缓存堆栈中的对应stash删除
git stash clear     //  删除所有缓存的stash

7. git cherry-pick

假设master分支和dev分支代码有一定区别,
dev分支有多次提交记录,其中一次提交id为:88203a83aa,
现在我需要且只需要把id为88203a83aa的提交记录代码合并到master分支,怎么办?
git checkout master
git pull origin master
git cherry-pick 88203a83aa
git push origin master
这样,只有id为88203a83aa的代码会合并到master分支。

git cherry-pick -x committed    // 会保留原提交者信息
git cherry-pick <start-commit-id> .. <end-commit-id>  // 把不包含start-commit-id的pick过来,左开右闭   
git cherry-pick <start-commit-id>^ .. <end-commit-id>  // 把包含start-commit-id的pick过来,闭区间

8. git 回撤操作

git checkout --  文件名    // 回撤git add之前被修改的文件,还原该文件的此次修改
git stash 加上 git stash clear   // 回撤git add之前被修改的文件,会还原此次修改的所有文件
git reset HEAD 文件名   //  将已git add的文件回退到git add之前的状态,不会还原修改
git commit --amend -m "2"   // 合并提交记录,假设上一次提交为1当前为2,执行此操作并推送远程后只能看到提交2

git reset  :
--hard 可以回退已commit和push的操作,同时还原本地修改造成数据丢失
--soft  可以回退已commit和push的操作,但不会还原本地修改,一般用于回退已commit操作的
两者用法是一样的,根据场景选择,下面以--hard为例:
git reset  --hard  HEAD^     // 回撤1步,假设当前提交记录为2,上次一提交为1,回撤到提交记录为1的位置
git reset  --hard  HEAD~2    // 回撤2步,数字为几代表回退几步
git log     // 查看提交记录,*不能查看已删除的commit*
git reset --hard 提交id    // 回撤到该次提交id的位置
git push -f -u origin dev  // 强制推送回撤后的内容到远程dev分支

若使用git reset --hard造成本地修改丢失,可以使用git reflog 查看所有commit记录,然后再执行 git reset --hard 操作,示例如下:
在这里插入图片描述

9. git 标签相关

git tag   // 列出所有打过的标签名
git tag -l 'v*'  // 列出v开头的所有标签
git tag v1.0 88203a83aa  -m "第一版"    // 将提交id为88203a83aa打上v1.0标签,其中 id 和 -m 参数可省略
git checkout  v1.0    // 切换到标签1.0版本
git tag  -d  v1.0    // 删除本地标签v1.0
git push origin  :v1.0  // 删除远程仓库标签v1.0,或者 git push origin --delete v1.0
git push origin --tags     // 把所有打好的标签推送到远程仓库
git push origin v1.0     // 将v1.0标签推送到远程仓库
git show v1.0    // 查看tag信息

10. git rebase

git rebase 命令简单来讲,就是可以将多次提交合并成一次提交,在分支合并时,如果有代码冲突,在合并成一次提交之后只需要解决一次冲突即可,否则可能每次提交在合并时都需要解决冲突。

有两个分支master和dev,开发时在dev开发,然后需要合并到master分支,为了减少提交记录次数以及更快的解决冲突,在合并前做了个git rebase操作。刚刚dev分支做了三次提交,分别为:update 1/2/3,如下图:
在这里插入图片描述
执行 git rebase -i HEAD~3 ,将三次提交合并为一次,执行完后出现如下图所示:在这里插入图片描述
下面注释部分是说明每个命令别名代表的意义,此处将 pick 5087bab update 3 中的 pick 改为 s ,代表 squash,如下图:在这里插入图片描述
修改完毕后输入 :wq!回车,出现如下界面:在这里插入图片描述
这里是提示你输入提交描述,示例如下图:在这里插入图片描述
修改完毕后输入 :wq!回车,出现如下界面:在这里插入图片描述
这时候再去查看git 提交历史,发现三次提交合并为一次提交了,并且描述为 update config,如下图:在这里插入图片描述
刚刚的三次提交里修改了application.yml,碰巧master分支也修改了application.yml,此时执行 git rebase master 出现冲突,如下图:在这里插入图片描述
找到冲突的文件解决冲突,执行 git add 后执行 git rebase --continue ,再执行后续操作完成合并,如下图:
在这里插入图片描述
从上述过程可以看出,dev分支的 git 提交记录树中三次提交变成了一次提交,而且三次提交都修改了 application.yml,如果不用 git rebase 命令,在合并到master分支时,将需要解决三次冲突,费时费力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值