提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、git是什么?
- 二、工作中常用git命令集合
- 三、部分git命令注意事项
- 四、git reset 的五种模式
- 五、总结
前言
git命令
其实不管是服务端还是前端,几乎都离不开git,当然也有部分人使用的是svn,或者使用图形化的git工具,例如:Git GUI
SourceTree
GitKraken
等等,或者借用vscode/webstorm等开发工具里面自带的图形界面来图形化界面的形式实现git功能。
我个人还是喜欢使用最基础的命令操作哈,有人感觉装逼,有人感觉命令更加方便,我单纯比较懒,一直用命令,用习惯了,以下仅仅是个人常用的命令总和,担心那天忘了,自己看看,哈哈
一、git是什么?
定义:分布式版本控制系统
Git是一种分布式版本控制系统,允许用户对代码进行本地克隆,形成一个完整的版本控制存储库,从而无论在线还是离线都能轻松工作。
与其他版本控制系统不同,Git通过记录快照而非差异比较来存储数据,这使得它在处理大型项目时具有显著的优势。
Git的优点包括速度快,这对于像Linux内核这样的大型项目来说非常重要,因为它能够高效地处理大量的代码变更。此外,Git的分布式特性使得源代码的发布和交流极其方便,用户可以在本地进行版本控制操作,然后在需要时与远程服务器同步。
二、工作中常用git命令集合
git init // 在当前目录初始化git仓库
git clone [url] // 克隆远程仓库到当前目录 url远程仓库地址git config --global user.name "[name]" // 设置用户名 一般配置一次就好了
git config --global user.email "[email address]" // 设置用户邮箱 一般配置一次就好了git add . // 添加所有文件 .代表所有暂存区的文件
git add [file-name] // 添加指定文件 file 文件名git commit -m "[commit message]" // 提交更改 -m 后面根提交信息git log // 查看提交历史git remote add origin [url] // 添加远程仓库git branch // 列出所有本地分支
git branch -a // 列出所有本地分支和远程分支
git branch [branch-name] // 本地创建分支
git branch --delete [branch-name] // 本地删除分支 或者 git branch -D [branch-name] 或者 git branch -d [branch-name]
git branch -m [old-branch-name] [new-branch-name] // 更改本地分支名,old-branch-name 旧名字 new-branch-name 新名字 git checkout [branch-name] // 切换到指定分支 branch-name 分支名
git checkout -b [branch-name] // 创建分支,并切换到创建好的分支上
git checkout [commit_id] [file] // 恢复文件,commit_id指commit提交记录的id,可以通过git log查询,file 就是文件名了
git checkout [commit_id] // 版本回退git pull // 将远程所有的分支更新到本地目录中,当你使用vscode的时候查询远程分支,会发现有些没有,那么执行这个命令就好了
git pull origin [branch-name] // 以将远程仓库的最新代码拉取到本地仓库,以使你的本地仓库与远程仓库同步,这个命令其实有两重意思,后面会细讲git merge [branch-name] // 合并指定分支到当前分支, 它将两个分支的历史记录合并在一起,创建一个新的合并提交(merge commit)git push origin [branch-name] // 将本地代码推送到远程仓库,确保本地分支与远程分支的代码一致,使得项目的所有开发者能够共享最新的代码。
git push origin --delete [branch-name] // 删除远程仓库分支git stash // 暂存工作区修改的内容,可以stash多次,从最近一次的commit读取相关内容。
git stash pop // 恢复暂存的工作区内容,值得注意的是, git stash pop 获取到的是最近一次stash进去的内容,也就是说如果stash两次或者多次,那么恢复的是最新一次stash进去的内容。
git stash list // 查询工作区所有stash的列表
git stash apply stash@{1} // 吐出来指定暂存内容,stash@{1}就是暂存的序号,不指定就是默认最新的一次。
git stash clear // 清空stashgit reset *** // 这个命令下面会详细讲解,它有三种模式git cherry-pick [commit_id] // 合并某分支的某一次提交记录,到本分支上,这里commit_id是commit提交生成的id
git cherry-pick [commit1] [commit2] ... // 合并分支的某几次提交记录
git cherry-pick [commit1]..[commit2] // 合并提交记录commit1到commit2之间的所有的提交记录,但不包含commit1的这次提交记录
git cherry-pick [commit1]^..[commit2] // 合并提交记录commit1到commit2之间的所有的提交记录,包含commit1的这次提交记录
git cherry-pick [branch_name] // 合并该分支上最新的一次提交记录
三、部分git命令注意事项
- git pull origin [branch-name]
这个其实是一个组合命令,它首先执行 git fetch,然后执行 git merge,所以其实给人会有两种现象
一种是当你本地分支和远程分支名相同时,就是本地同步远程的最新代码了,看起来是更新操作,实际也有合并的成分,但都是同分支操作的,个人感觉更新的成分大与合并。
另一种是当你分支和远程分支名不相同时,这里就要注意了,合并的成分大于更新了,这个时候更像是执行git merge [branch-name]命令,很容易会有文件冲突了。
当然git pull 和 git merge是有区别的
git pull 是一个快捷方式: 执行 fetch 和 merge 的组合操作,用于将远程仓库的更改同步到本地。
git merge 是一个单独的合并操作: 用于将一个分支的更改合并到另一个分支中,通常是在本地操作不同的分支之间使用。
实际开发中,git pull 更适合用于保持本地分支与远程分支同步,而 git merge 则更适合用于在本地将多个分支的工作成果合并在一起。
- git branch [branch-name] 和 git checkout -b [branch-name]
这里需要注意哈,当你创建新分支时,都是以你当前这个分支为根本,创建一个新的出来,这就导致当我们实际开发新的功能时,注意要从master或者main分支去创建,避免业务逻辑代码重合而拆分不出来了。
- git stash 和 git stash pop
这两个命令一般都是相互配合出来的啊,类似于焦不离孟孟不离焦的情况,上文中也提到,git stash pop会吐出最新的一次暂存,那么如果git stash多次,其实git stash pop也可以吐出来多次。
比如git stash 两次后,git stash pop也可以执行两次,把内容都吐出来,但是这里要注意点当两次吐出来的文件有一个重复的那么第二次是吐不出来的,它会提示你有冲突,需要暂存起来,(也就是git add . git commit -m '')后才能继续吐出来
。所以在某种情况多次执行git stash pop是可以的,同理如果执行git stash pop有冲突或者失败了,那其实这个暂存还是在git stash list中能够看到的,这是git的一种保护机制,不要担心失败冲突了,就没了哈。
四、git reset 的五种模式
- git reset --soft [版本号]
$ git reset --soft master^^
$ git reset --soft master~2
$ git reset --soft head^^
$ git reset --soft head~2
$ git reset --soft edition3^^ #这里用edition3代替git log中的唯一字符串
$ git reset --soft edition3~2
# 以上都是等价命令,使用其中一个,回退到edition版本3的前两个版本,也就是回到edition1,文件只有1.p的时候
- git reset --mixed [版本号]
git reset --mixed master^^ #用mixed回退到edition1的状态
- git reset --hard [版本号]
git reset --hard master^^ #用hard回退到edition1的状态
- git reset --merge [版本号] 和 git reset --keep [版本号]
这两种几乎不会用到,很不常用,下面我会贴,几个大声的博客链接,可以了解下。
--soft、--mixed和--hard三这的区别在于,soft 只改变本地库head的指向,mixed 改变本地库head的指向,也把暂存还原成本地库所指向的版本, hard 改变本地库head的指向,也把暂存还原成本地库所指向的版本,还把工作目录还原成本地库的版本
以下是比较详细的讲解,推荐下,我就懒的再加上个人的理解去诉说了。
git reset 三者区别详细解释一
git reset 三者区别详细解释二
git reset 三者区别详细解释三
五、总结
以上就是本人对git的一些命令总结,当然还有很多很多,这里只是列举一些常用的,同时述一些注意事项,其实我们使用相关的图形界面操作,最后也是会生成具体的git命令的,就拿Vscode里的操作工具提交代码或者更新远程仓库等等,其实是能看到具体的git命令,如下图
最后希望以上一些命令对初学者有点点帮助。