一文理清git的常用操作及命令
认识git
git是每个开发者都应该掌握的简单易用、高效的版本管理工具。巴拉巴拉~~
git安装及配置
安装就比较简单了,去官网下载对应系统的安装包即可,网上教程一大堆就不再多做赘述,安装好之后使用git --version
查看是否安装成功,如果有版本信息就说明安装成功,就可以开始使用了。
安装之后还需要配置一下账户名和邮箱,这两条配置很重要,你每次的提交都会引用到,表明是谁进行了本次提交。
git config --global user.name "yourname"
git config --global user.mail "yourmail"
基础命令
首先列举一下常用命令:
初始化新仓库 git init
克隆代码 git clone https://gitee.com/test/test.git
克隆指定分支 git clone -b dev git@gitee.com:test/test.git
查看状态 git status
提交单个文件 git add index.js
提交所有文件 git add -A
使用通配符提交 git add *.js
提交到仓库中 git commit -m '提示信息'
提交已经跟踪过的文件,不需要执行add git commit -a -m '提交信息'
删除版本库与项目目录中的文件 git rm index.js
只删除版本库中文件但保存项目目录中文件 git rm --cached index.js
修改最后一次提交 git commit --amend
哇哦amazing!!!!!
基础流程
首先去克隆你的项目:
git clone https://gitee.com/test/test.git
然后在本地就可以去做开发了。开发好了后要入库,就需要进行下面的流程:
将修改文件提交到暂存区(按需使用命令即可):
提交单个文件: git add index.js
提交所有文件: git add -A 或者 git add .
使用通配符提交: git add *.js
然后将修改commit到本地git仓库:
提交到仓库中 git commit -m '提示信息'
提交已经跟踪过的文件,不需要执行add git commit -a -m '提交信息'
最后将本次修改推送到远端仓库(码云、github):
git push
git push origin HEAD:refs/for/branchname
git工作区
git clean
命令用来从工作目录中删除所有 没有跟踪(tracked) 过的文件
git clean -n
是一次clean的演习, 告诉你哪些文件会被删除
git clean -f
删除当前目录下没有tracked过的文件,不会删除.gitignore指定的文件
git clean -df
删除当前目录下没有被tracked过的文件和文件夹
git checkout .
将没有放入到暂存区的所有文件恢复
git checkout hd.js
放弃指定文件的修改
git checkout -- hd.js
将文件从暂存区恢复(如果没有提交到暂存区,将恢复到最近版本
git暂存区
git add .
提交所有修改和新增的文件
git add -u
只提交修改文件不提交新文件
git ls-files -s
查看暂存区文件列表
git cat-file -p 6e9a94
查看暂存区文件内容
git日志查看
查看日志 git log
查看最近2次提交日志并显示文件差异 git log -p -2
显示已修改的文件清单 git log --name-only
显示新增、修改、删除的文件清单 git log --name-status
一行显示并只显示SHA-1的前几个字符 git log --oneline
分支管理
我们一般开发不会直接在master分支开发,而是在开发分支上。所以需要分支管理:
分支管理流程:
- 新建开发分支dev
git branch dev
- 切换到开发分支进行新业务开发
git checkout dev
- 完成开发后提交
git commit -m "dev开发"
- 合并到master分支
切换到master分支 git checkout master 合并开发分支代码 git merge dev
- 推送到远程master
git push
分支管理常用命令:
创建分支
git branch dev
查看分支git branch
切换分支git checkout dev
创建并切换分支git checkout -b feature/bbs
将分支 main 更新为mastergit branch -m main master
合并dev分支到master1. git checkout master 2. git merge dev
删除分支git branch -d dev
删除没有合并的分支git branch -D dev
删除远程分支git push origin :dev
查看未合并的分支(切换到master)git branch --no-merged
查看已经合并的分支(切换到master)git branch --merged
reset命令
reset命令用来重置暂存区和本地工作区的内容,它有三个可选参数:
- --hard 重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容
- --soft 重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致
- --mixed(默认) 重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致
哈哈还是得看例子:
git reset --hard b7b73147ca8d6fc20e451d7b36
恢复到指定提交版本(先通过 git log 查看版本号),重置stage区和工作目录里的内容。git reset --hard HEAD^^^
恢复前三个版本git reset --soft
保留工作区的内容,只回退commit的动作。保留 working tree工作目录的內容,index 暂存区与 working tree 工作目录的內容一致,只是仓库repository 中的內容的改变。git reset HEAD -- .
撤销暂存区的文件git reset --hard
清空工作区和暂存区的改动git reset HEAD hd.js
放弃已经add 暂存区的文件hd.js
stash命令
"暂存" 可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
- 储藏工作
git stash
- 查看储藏列表
git stash list
- 应用最近的储藏
git stash apply
- 应用更早的储藏
git stash apply stash@{2}
- 删除储藏
git stash drop stash@{0}
- 应用并删除储藏
git stash pop
cherry-pick命令
命令格式
git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。
git cherry-pick <commitHash>
举个例子:代码库有两个分支master、dev
master: 1 - 2 - 3 - 4 - 5
\
6 - 7 - 8 dev分支
现要将dev分支的第7次提交合并到master分支
# 切换到 master 分支
git checkout master
# Cherry pick 操作
git cherry-pick 7
然后就变成了:
master: 1 - 2 - 3 - 4 - 5 - 7
\
6 - 7 - 8 dev分支
master分支的末尾增加了一个提交7。
git cherry-pick命令的常用配置项如下。
-
-e,--edit
打开外部编辑器,编辑提交信息。 -
-n,--no-commit
只更新工作区和暂存区,不产生新的提交。 -
-x
在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。 -
-s,--signoff
在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。 -
-m parent-number,--mainline parent-number
如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。 -
-m
配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。
其他
如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。
-
--continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。$ git cherry-pick --continue
-
--abort
git cherry-pick --abort
发生代码冲突后,放弃合并,回到操作前的样子。 -
--quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。