闲言碎语
刚工作没几年,最开始使用的是 svn,感觉操作简单,就是多人开发的时候管理代码贼麻烦。后来换了新公司后使用 Git 管理代码,发现这玩意简直不要太好用,尤其是可以建分支,减少了工作中很多麻烦的操作。于是乎我变成了 Git 的忠实粉丝。我使用的是 Win 电脑,最开始不知道 Git 命令,也懒得去敲,所以一直使用 sourceTree 来操作(也推荐小白先用该工具理解操作的含义后再考虑用命令方式操作)。后来发现用工具没有用命令行那样装*,所以也开始了解一些常用的 Git 命令,于是乎就有了这篇文。文中的一些概念都是我理解后白话的,如有什么不足,欢迎纠正补充。
概念介绍
1. 区分“本地操作”与“远程操作”
本地操作:表示操作的是本地电脑的文件夹中的文件。
远程操作:表示操作的是远程仓库(如: gitLab 、码云等第三方代码管理仓库)中的文件。
2. 区分“工作区”、“暂存区”与“待推送区”
注意:工作区、暂存区与待推送区都是指本地操作。(名字是我自己理解后起的,欢迎纠正为正规名称)
工作区:表示正在修改或修改过的文件的存储区域,也就是文件夹中的文件。
暂存区:表示将修改过的文件打上标识,标记为已经确认修改完成的文件,体现在文件夹中的 .git 文件。
待推送区:表示更换暂存区中的文件标识,标记为本地代码已经全部修改完毕,可以推送到远程仓库了,体现在文件夹中的 .git 文件。
3. 区分主线与分支
主线:新建的远程仓库默认会生成一个 master 分支。
分支:根据业务需求创建的分支,常用的有 feature 分支(功能分支)、bug 分支(问题修复分支)
ps: 建议不要直接在 master 分支上开发,而是从 master 上新建 feature 分支,待开发完成、测试无误后合并到 master 上。
4. Git 标签
标签通常用于代码封版的时候使用。作用于 commitID 上,因为commitID 是一串无规则字符串,不易区分和理解,所以添加标签可以方便区分版本与代码回溯,并且可通过标签快速找到对应的 commitID。
实际场景中使用Git命令
一、本地代码已经写完,如何推送到第三方代码管理仓库(如:码云等)的新建项目中?
- 打开 Git 命令工具,进入到本地代码文件夹,执行
git init
初始化该文件夹。 - 执行
git remote add origin + 远程项目地址
,关联本地文件夹与远程库。 - 执行
git status
,查看被修改过的文件。 - 如果忘记修改了哪些内容,可以执行
git diff + 步骤3中显示的修改过的文件路径
(注意:一定按照步骤3显示的文件按路径写,精确到文件名称与后缀),查看完可以通过q
或者shift+z+z
(按住 shift 同时按两次 z 键)退出。 - 如果有一些文件不想修改,可以执行
git checkout -- 文件路径
来撤销修改。 - 确认没问题了,执行
git add 文件路径
来一个个添加文件,或者执行git add 文件夹路径
添加整个文件夹下的文件,再或者执行git add -A
添加全部文件到暂存区。
************** PS:到此为止,结束了“工作区”的操作 ************** - 如果此时需要干点别的,这次的代码下次管理的话,可以执行
git stash
将代码进行存储(当然它也将工作区中的代码一起存储了),之后要是想看存储了哪些,可以执行git stash list
,如果想恢复就执行git stash apply +list中的id
。更多储藏命令,请参照本文命令整理。 - 如果有些文件不想提交了,可执行
git reset HEAD +文件路径
,将文件退回到工作区,再由工作区放弃修改。 - 确认没啥问题就可以执行
git commit -m +"提交备注"
,将代码提交到待推送区。注意:一定要写提交备注,方便以后查看知道提交了什么功能等。
************** PS:到此为止,结束了“暂存区”的操作 ************** - 如果不想推送到远程仓库,可执行
git reset --hard HEAD^
,退回到上一次提交的版本。 - 确认没啥问题,执行
git push -u origin +自己的分支
,将代码推送到远程。(第一次推送需要添加-u,以后可以省略)更多撤销待推送区代码命令,请参照本文命令整理。
************** PS:到此为止,所有操作结束 **************
二、我想查看之前都提交了什么东西,怎么操作?
执行 git log
可以查看详细的提交信息(包括 commitID、提交人、提交时间、提交备注)。
如果只想看 CommitID 和 提交备注,可执行 git log --pretty=oneline。<br/>  如果只看某个文件的提交记录,可打开指定文件所在的文件夹,执行
git log --pretty=oneline +指定文件名`。
三、线上、内网、测试三种环境的代码怎么区分?
这里就要用到 Git 最好用的功能了(个人认为)—— 分支!
- Git 项目自带一个 master 分支(主线),可以以它为线上环境。
- 在 master 分支上执行
git checkout -b +分支名
,可以创建并切换到该分支,以它为内网环境。这里暂命名为 dev 分支 - 在从 master 分支上新建一个测试分支,这里暂命名为 dev-test 分支。
- 三种环境搭建完成后,可以在 dev 分支中进行日常开发工作,开发完成后,执行
git checkout dev-test
切换到 dev-test 分支,然后执行git merge dev -m +"合并备注"
将 dev 分支中的代码合并到 dev-test 分支,或者执行git merge --on-ff -m +"合并备注"
可以合并分支并生成合并日志,然后测试成功之后再合并到 master 上进行发版。 - 如果你忘记你又哪些分支时,可执行
git branch
查看所有分支名,分支名前面带星号的就是当前分支。 - 在测试期间如果出现 bug ,可新建 bug 分支(
git checkout -b bug-***
),在修复后再合并到 dev 分支,然后执行git branch -d +分支名
将该分支删除。 - 这里的所有操作都是本地操作!如果想在远程仓库也有你新建的分支,需要执行
git push origin +分支名
推送到远程仓库。
怎么从现有的远程仓库获取代码开发呢?
- 执行
git clone +远程仓库代码地址
将远程的 master 代码拉取到本地。 - 拉取到本地后,如果想再拉取分支上的代码,可执行
git pull origin +远程分支名
将指定分支拉去到本地。 - 如果你是参与开源项目,最好拉去代码后新建一个自己分支,开发结束后,可以将分支推送到远程仓库,由项目管理者确认是否要合并你的代码。
本地代码保存到多个第三方管理仓库该怎么操作呢?
- 先将本地代码关联到一个第三方管理仓库
git remote add origin +第三方管理仓库地址
,然后将代码推送。 - 代码推送成功后,执行
git remote remove origin
取消关联,再执行步骤1中的命令,关联其他的第三方仓库。 - 如果不知道现在关联的是哪一个仓库了,可执行
git remote -v
查看当前管理的仓库地址。
多人开发时代码该如何管理呢?
- 从开发分支(暂叫 dev 分支)上新建自己的功能分支(feature 分支),然后进行开发。
- 开发完成,先执行
git pull
拉取 dev 分支上最新的代码。然后执行git push origin dev
将自己的代码推送到远程仓库。 - 如果拉取 dev 分支后提示有冲突时,需要手动对冲突代码进行取舍,处理结束后再提交推送。
- 如果 git pull 提示 no tracking information,则说明本地分支与远程分支的链接关系没有创建,用命令 git branch --set-upstream-to=远程主分支/远程分支 本地分支。
常用命令整理
本地操作
-
git init
:初始化文件夹为 git 仓库 -
git add +文件路径
:将文件添加到“暂存区” -
git commit -m +提交备注
: 将文件提交到“待推送区” -
git status
:查看被修改过的文件 -
git deff +文件路径
:比较查看文件修改了哪些内容 -
git log
:查看详细的提交记录 -
git log --pretty=oneline
:仅查看包含 commitID 和提交备注的提交记录 -
git log --pretty=oneline +文件名
:到某个文件夹下执行该代码,查看指定文件的提交记录 -
q
或shift+z+z
:退出查看日志或记录 -
git checkout -- 文件路径
:撤销“工作区”修改的文件内容 -
git reset HEAD 文件路径
:撤销“暂存区”修改的文件内容 -
git reset --hard HEAD^
:回退到上个版本(上一次的commit) -
git reset --hard HEAD~10
: 回退到上10个版本 -
git reset --hard +commitID
:退回到指定 commit -
git reflog
:查看之前的 commitID -
git rm +文件路径
:删除指定文件
远程操作
-
git remote add origin 远程仓库地址
:关联远程库 -
git remote remove origin
:取消关联 -
git push -u origin +本地分支名
: 将分支推送到远程仓库 -
git clone +远程代码地址
:拉取远程仓库代码 -
git pull origin +远程仓库分支
: 拉取指定远程仓库分支代码 -
git remote -v
:查看远程仓库详细信息(仓库连接地址)
分支操作
-
git checkout -b +分支名
:创建并切换分支 -
git checkout +分支名
:切换分支 -
git branch +分支名
:创建分支 -
git branch
:查看分支 -
git merge +被合并分支名
:合并分支 -
git merge v--on-ff -m +合并描述
: 合并分支并生成合并日志 -
git branch -d +分支名
:删除分支 -
git branch -D +分支名
:强制删除分支 -
git log --graph --pertty=oneline -abbrev-commit
:查看分支合并情况
储藏管理
-
git stash
:储藏当前“工作区”内容 -
git stash list
:查看储藏内容 -
git stash apply
:恢复储藏内容到工作区,但不删除储藏内容 -
git stash apply +储藏内容的key
:恢复指定储藏内容 -
git stash drop
:删除储藏内容 -
git stash drop +储藏内容的key
:删除指定储藏内容 -
git stash pop +储藏内容的key
:恢复并删除指定储藏内容
标签管理
-
git tag +标签名
:创建标签,默认打在最新的 commitID 上 -
git tag +标签名 +commitID
:在指定 commitID 上创建标签 -
git tag
:查看所有标签,按字母排序 -
git show +标签名
:查看指定标签信息 -
git tag -a +标签名 -m +标签描述
:创建带描述的标签 -
git tag -d +标签名
:删除指定标签 -
git push +远程分支 +标签名
:推送指定本地标签到远程仓库 -
git push +远程分支名 --tags
:推送全部未推送的本地标签
结束语
该文章参考廖雪峰老师的 Git 教程+平常搜索收集的,感谢廖雪峰老师和各位提供命令笔记的同学们。同时该文章中如有操作命令错误或者您有其他常用命令,欢迎下方留言。