一文普及 Git 使用与常用命令整理

闲言碎语

 刚工作没几年,最开始使用的是 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命令

一、本地代码已经写完,如何推送到第三方代码管理仓库(如:码云等)的新建项目中?

  1. 打开 Git 命令工具,进入到本地代码文件夹,执行 git init 初始化该文件夹。
  2. 执行 git remote add origin + 远程项目地址,关联本地文件夹与远程库。
  3. 执行 git status,查看被修改过的文件。
  4. 如果忘记修改了哪些内容,可以执行 git diff + 步骤3中显示的修改过的文件路径(注意:一定按照步骤3显示的文件按路径写,精确到文件名称与后缀),查看完可以通过 q 或者 shift+z+z (按住 shift 同时按两次 z 键)退出。
  5. 如果有一些文件不想修改,可以执行 git checkout -- 文件路径 来撤销修改。
  6. 确认没问题了,执行 git add 文件路径 来一个个添加文件,或者执行 git add 文件夹路径 添加整个文件夹下的文件,再或者执行 git add -A 添加全部文件到暂存区。

    ************** PS:到此为止,结束了“工作区”的操作 **************
  7. 如果此时需要干点别的,这次的代码下次管理的话,可以执行 git stash 将代码进行存储(当然它也将工作区中的代码一起存储了),之后要是想看存储了哪些,可以执行 git stash list,如果想恢复就执行 git stash apply +list中的id。更多储藏命令,请参照本文命令整理。
  8. 如果有些文件不想提交了,可执行 git reset HEAD +文件路径,将文件退回到工作区,再由工作区放弃修改。
  9. 确认没啥问题就可以执行 git commit -m +"提交备注",将代码提交到待推送区。注意:一定要写提交备注,方便以后查看知道提交了什么功能等。

    ************** PS:到此为止,结束了“暂存区”的操作 **************
  10. 如果不想推送到远程仓库,可执行 git reset --hard HEAD^,退回到上一次提交的版本。
  11. 确认没啥问题,执行 git push -u origin +自己的分支,将代码推送到远程。(第一次推送需要添加-u,以后可以省略)更多撤销待推送区代码命令,请参照本文命令整理。

    ************** PS:到此为止,所有操作结束 **************

二、我想查看之前都提交了什么东西,怎么操作?

 执行 git log 可以查看详细的提交信息(包括 commitID、提交人、提交时间、提交备注)。

 如果只想看 CommitID 和 提交备注,可执行 git log --pretty=oneline。<br/> &emsp;如果只看某个文件的提交记录,可打开指定文件所在的文件夹,执行git log --pretty=oneline +指定文件名`。

三、线上、内网、测试三种环境的代码怎么区分?

这里就要用到 Git 最好用的功能了(个人认为)—— 分支!

  1. Git 项目自带一个 master 分支(主线),可以以它为线上环境。
  2. 在 master 分支上执行 git checkout -b +分支名,可以创建并切换到该分支,以它为内网环境。这里暂命名为 dev 分支
  3. 在从 master 分支上新建一个测试分支,这里暂命名为 dev-test 分支。
  4. 三种环境搭建完成后,可以在 dev 分支中进行日常开发工作,开发完成后,执行 git checkout dev-test 切换到 dev-test 分支,然后执行 git merge dev -m +"合并备注" 将 dev 分支中的代码合并到 dev-test 分支,或者执行 git merge --on-ff -m +"合并备注" 可以合并分支并生成合并日志,然后测试成功之后再合并到 master 上进行发版。
  5. 如果你忘记你又哪些分支时,可执行 git branch 查看所有分支名,分支名前面带星号的就是当前分支。
  6. 在测试期间如果出现 bug ,可新建 bug 分支(git checkout -b bug-***),在修复后再合并到 dev 分支,然后执行 git branch -d +分支名 将该分支删除。
  7. 这里的所有操作都是本地操作!如果想在远程仓库也有你新建的分支,需要执行 git push origin +分支名推送到远程仓库。

怎么从现有的远程仓库获取代码开发呢?

  1. 执行 git clone +远程仓库代码地址将远程的 master 代码拉取到本地。
  2. 拉取到本地后,如果想再拉取分支上的代码,可执行 git pull origin +远程分支名 将指定分支拉去到本地。
  3. 如果你是参与开源项目,最好拉去代码后新建一个自己分支,开发结束后,可以将分支推送到远程仓库,由项目管理者确认是否要合并你的代码。

本地代码保存到多个第三方管理仓库该怎么操作呢?

  1. 先将本地代码关联到一个第三方管理仓库 git remote add origin +第三方管理仓库地址,然后将代码推送。
  2. 代码推送成功后,执行 git remote remove origin 取消关联,再执行步骤1中的命令,关联其他的第三方仓库。
  3. 如果不知道现在关联的是哪一个仓库了,可执行 git remote -v 查看当前管理的仓库地址。

多人开发时代码该如何管理呢?

  1. 从开发分支(暂叫 dev 分支)上新建自己的功能分支(feature 分支),然后进行开发。
  2. 开发完成,先执行 git pull 拉取 dev 分支上最新的代码。然后执行 git push origin dev 将自己的代码推送到远程仓库。
  3. 如果拉取 dev 分支后提示有冲突时,需要手动对冲突代码进行取舍,处理结束后再提交推送。
  4. 如果 git pull 提示 no tracking information,则说明本地分支与远程分支的链接关系没有创建,用命令 git branch --set-upstream-to=远程主分支/远程分支 本地分支。

常用命令整理

本地操作

  1. git init :初始化文件夹为 git 仓库
  2. git add +文件路径 :将文件添加到“暂存区”
  3. git commit -m +提交备注 : 将文件提交到“待推送区”
  4. git status :查看被修改过的文件
  5. git deff +文件路径 :比较查看文件修改了哪些内容
  6. git log :查看详细的提交记录
  7. git log --pretty=oneline :仅查看包含 commitID 和提交备注的提交记录
  8. git log --pretty=oneline +文件名 :到某个文件夹下执行该代码,查看指定文件的提交记录
  9. qshift+z+z :退出查看日志或记录
  10. git checkout -- 文件路径 :撤销“工作区”修改的文件内容
  11. git reset HEAD 文件路径 :撤销“暂存区”修改的文件内容
  12. git reset --hard HEAD^ :回退到上个版本(上一次的commit)
  13. git reset --hard HEAD~10 : 回退到上10个版本
  14. git reset --hard +commitID :退回到指定 commit
  15. git reflog :查看之前的 commitID
  16. git rm +文件路径 :删除指定文件

远程操作

  1. git remote add origin 远程仓库地址 :关联远程库
  2. git remote remove origin :取消关联
  3. git push -u origin +本地分支名 : 将分支推送到远程仓库
  4. git clone +远程代码地址 :拉取远程仓库代码
  5. git pull origin +远程仓库分支 : 拉取指定远程仓库分支代码
  6. git remote -v :查看远程仓库详细信息(仓库连接地址)

分支操作

  1. git checkout -b +分支名 :创建并切换分支
  2. git checkout +分支名 :切换分支
  3. git branch +分支名 :创建分支
  4. git branch :查看分支
  5. git merge +被合并分支名 :合并分支
  6. git merge v--on-ff -m +合并描述 : 合并分支并生成合并日志
  7. git branch -d +分支名 :删除分支
  8. git branch -D +分支名 :强制删除分支
  9. git log --graph --pertty=oneline -abbrev-commit :查看分支合并情况

储藏管理

  1. git stash :储藏当前“工作区”内容
  2. git stash list :查看储藏内容
  3. git stash apply :恢复储藏内容到工作区,但不删除储藏内容
  4. git stash apply +储藏内容的key :恢复指定储藏内容
  5. git stash drop :删除储藏内容
  6. git stash drop +储藏内容的key :删除指定储藏内容
  7. git stash pop +储藏内容的key :恢复并删除指定储藏内容

标签管理

  1. git tag +标签名 :创建标签,默认打在最新的 commitID 上
  2. git tag +标签名 +commitID :在指定 commitID 上创建标签
  3. git tag :查看所有标签,按字母排序
  4. git show +标签名 :查看指定标签信息
  5. git tag -a +标签名 -m +标签描述 :创建带描述的标签
  6. git tag -d +标签名 :删除指定标签
  7. git push +远程分支 +标签名 :推送指定本地标签到远程仓库
  8. git push +远程分支名 --tags :推送全部未推送的本地标签

结束语

该文章参考廖雪峰老师的 Git 教程+平常搜索收集的,感谢廖雪峰老师和各位提供命令笔记的同学们。同时该文章中如有操作命令错误或者您有其他常用命令,欢迎下方留言。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,767评论 0 10
  • 简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 与常用的版本控制工具 ...
    闽越布衣阅读 2,739评论 0 18
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,065评论 4 18
  • 配置 git config --global user.name [name] git config --glob...
    jamalping阅读 380评论 0 0
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,412评论 0 7