Git 命令总结,从零到熟悉(全)


原文出自:https://www.pandashen.com


什么是 Git?

Git 是一个免费的开源分布式版本控制系统,它的设计目的是为了速度和效率的处理从小型到大型的项目;Git 可以帮我们管理我们的代码,记录历史,只要代码提交到 Git 上就永久不会丢失,可以随时 “穿越”(回到之前的某一个版本);可以多端共享,团队协作中,多个人操作了同一个文件时,可以实现自动合并(模块化,组件化)、标记冲突,拥有强大的分支管理系统。


Git 与 SVN 的区别

SVN:集中式,需要一台中央服务器,所有代码的拉取和提交都是在中央服务器,一旦中央服务器或者网络出现故障,则不能拉取和提交代码,需要不断去备份中央服务器,防止代码丢失。

Git:分布式,有一个中央服务器的同时,每个开发者本地都有自己的本地仓库,拥有完整的版本库,不用担心代码丢失,Git 存储的是代码变化的快照,更新代码的速度要比 SVN 更快。


Git 安装

Windows

Mac

  • 如果安装过 Xcode 自带 Git,<a>https://developer.apple.com/xcode/</a>
  • 可以安装 Homebrew,是 wmac 的包管理器,<a>https://brew.sh/</a>,下面是两款界面美化插件:
    • Oh My ZSH:<a>http://ohmyz.sh/</a>
    • iTerm2:<a>https://www.iterm2.com/</a>


Linux 命令

1、打印工作目录

pwd

2、创建文件夹

mkdir 文件夹名

3、改变路径

进入盘符:

cd d:

进入文件夹:

cd 文件夹名

回上一级目录:

cd ..

进入某一个路径:

cd 路径

想要进入某一个不知道路径的文件夹中,可以直接拖拽该文件到命令窗口,会自动识别路径。

4、查看文件列表

ls

ls -al

下面命令加了 -al 参数可以查看隐藏文件。

5、创建文件

touch 文件名

6、移动文件

mv 文件/文件夹 路径

将文件或者文件夹移动到所输入的路径下。

7、查看文件内容

cat 文件名

8、删除文件 / 文件夹

rm -rf 文件夹名

rm 文件名

-rf 为递归删除,后面加上 * 为参数会递归删除整个文件夹的内容,rm -rf *(慎用)。

9、清空命令窗口

clear

10、查看命令历史

直接在命令行中查看:

history

将当前 Git 的命令历史写入文件中:

history > 文件名

11、使用 vi 编辑器编辑文件

vi 文件名

进入编辑模式:

i

进入命令模式:

Esc

保存并退出:

:wq

强制退出:

:q!

12、使用命令编辑文件

向文件输入内容:

echo 内容 > 文件名

向文件追加内容:

echo 内容 >> 文件名

当使用 echo 编辑了一个不存在的文件时,会创建一个新文件并将内容编辑到文件中,而 touch 创建的是空文件。


Git 的本地操作

Git 在管理文件时,所有文件都具有三种状态,已修改、已暂存、已提交。
Git 在本地仓库中由三部分组成,工作区、暂存区、版本库。
Git 管理的文件夹下都有一个名为 .git 的隐藏文件夹。

对应关系如下:

  • 已修改 → 工作区
  • 已暂存 → 暂存区(.git 文件夹下的 index 文件中)
  • 已提交 → 版本库

1、配置用户

不配置用户无法提交代码。

查看配置信息:

git config --list

配置用户名:

git config --global user.name "你的名字"

配置邮箱:

git config --global user.email "你的邮箱"

2、初始化 Git 仓库

在要初始化的文件夹下执行下面命令,告诉 Git 哪个文件夹被 Git 所管理,一个项目初始化一次,不能嵌套。

git init

3、查看 Git 状态

git status

文件为红色,代表有修改,文件名为绿色,代表已经加入暂存区。

4、添加到暂存区

git add 文件名

git add .

git add -A

.-A 两个参数均为全部提交到暂存区,. 只监控修改、添加文件的变化,-A 监控修改、添加、删除文件。

5、删除暂存区

git rm --cached 文件名

git rm --cached . -r

第一个命令是删除某一个文件的暂存区,当参数为 . 的时候删除全部暂存区,所以需要加上代表递归删除的参数 -r

6、提交到版本库

从暂存区提交到版本库:

git commit -m "版本信息"

从工作区直接提交到版本库(需要之前添加过暂存区):

git commit -a -m "版本信息"

7、查看提交日志

git log

8、比较工作区、暂存区、版本库

工作区和暂存区比较:

git diff

工作区和版本库比较:

git diff 分支名

暂存区和版本库比较:

git diff --cached

9、撤销操作

git checkout 文件名

git checkout .

撤销操作是将暂存区覆盖到工作区,会放弃掉当前工作区修改的内容,. 参数是将整个暂存区覆盖当前工作区,一旦撤销就回不到之前的工作区了。
当不小心将当前工作区错误的代码提交到暂存区,可以使用下面命令将暂存区回滚到上一个暂存区,只可回滚一次。

git reset HEAD 文件名

10、回退版本

查看所有的版本号:

git reflog

按版本号回退版本:

git reset --hard 版本号

回退到上一个版本:

git reset --hard HEAD^

回退某一个版本的文件到工作区:

git checkout 版本号 文件名

回退版本会将当前版本库选中的版本重新覆盖暂存区和工作区。

11、分支操作

查看分支:

git branch

Git 刚刚初始化管理的的文件夹必须有一次提交到版本库(root-commit:根提交)以后才会有主分支 master,否则即使创建了新分支也无法切换回 master。

创建分支:

git branch 分支名

切换分支:

git checkout 分支名

创建并切换分支:

git checkout -b 分支名

删除分支(需切换出要删除的分支):

git branch -D 分支名

新创建的分支和主分支 master 还是同一个区域,新建的文件只有提交到新分支的版本库才真正脱离关系。
分支工作区有更改不能直接切换其他分支,可以提交更改或者暂存更改,若暂存更改(使用暂存区覆盖掉工作区),等待重新切回分支时,还原暂存。
此处所说的暂存不是之前的将代码提交到暂存区,因为当前分支工作区的代码会变成要切换分支工作区的代码,而导致当前分支工作区的更改丢失,此处的暂存类似于将修改寄存,重新切回该分支时再还原。

暂存更改:

git stash

还原暂存的内容:

git stash pop

合并分支:

将指定分支合并到当前所在的分支,所以,在分支开发完毕后,合并分支需要先切换回 master 主分支。

git merge 指定的分支名

查看分支合并的图谱:

git log --graph

git log --graph --oneline

红色线代表主分支,绿色线代表新创建的分支,分支上的 * 代表提交到版本库的节点。--oneline 参数表示提交信息显示为一行。

12、解决冲突

当创建分支后,分支和 master 主分支分别提交代码到版本库,此时切换回 master 主分支,合并分支会出现冲突,需手动处理后,重新提交到暂存区并提交到版本库。

// 代码冲突
<<<<<<< HEAD (当前更改)
master 分支代码
=======
开发分支的代码
>>>>>>> 开发的分支 (传入的更改)


Git 操作远程仓库

远程仓库可以是 Github、Gitee(码云)、Coding 或者中央服务器等等。

以下是常用免费仓库的地址,可以在首页注册账号:

  • Github: <a>https://github.com</a>
  • Gitee: <a>https://gitee.com</a>
  • Coding: <a>https://coding.net</a>

1、处理需要过滤和提交的文件夹

使用 WebStrom 编辑器编辑代码时,会自动在根目录生成 .idea 文件夹,使用 Mac 开发时根目录下的 .DS_Store 文件夹,以及在项目开发时会安装依赖存放在 node_modules 文件夹中,此类文件夹都是在把代码上传到远程仓库或中央服务器时不应该上传的,因此应该在上传之前过滤掉。

在根目录创建 .gitignore 文件用于记录上传时被忽略的文件夹,内容(可根据需要自行配置)如下:

文件:.gitignore

.idea
.DS_Store
node_modules

Git 上传时会自动忽略空文件夹,假设想要上传一个名为 public 的空文件夹,需要在文件夹内新建一个名为 .gitkeep 的文件(名字随意,最好有语义化),目的是使要提交的空文件夹不再为空。

2、关联远程仓库

git remote add origin 远程仓库地址

3、查看关联的远程仓库

git remote -v

4、删除远程仓库的关联

git remote rm 地址别名

地址别名指的是上面的 origin,也可以是其他名称,必须对应要删除关联的地址别名。

5、推送代码到远程仓库

git push origin master

git push -u origin master

如果加上了 -u 参数,以后再次提交时可省略地址别名和分支名称,直接执行下面命令进行提交。

git push

6、拉取远程仓库的代码

在提交代码时,如果直接提交到远程仓库,会将当前代码覆盖到远程仓库,如果别人之前也向远程仓库提交了代码,会在远程仓库中造成冲突,所以一般在提交代码之前先拉取远程仓库的代码与本地代码进行合并,并产生一个新的历史记录,若出现冲突,手动处理冲突后再统一提交到远程仓库。

拉取但不合并代码(与 merge 配合,不常用):

git fetch origin master

拉取并合并代码(常用):

git pull origin master

7、创建 gh-pages 分支来发布静态页

涉及到远程仓库网站上的操作均以 Github 为例,其他仓库大同小异:

  • 在项目中创建一个名为 gh-pages 的分支;
  • 将分支提交到线上仓库;
  • 找到提供给你的仓库网站的 Settings 切换到 github-pages
  • 点击该栏顶端的地址可以访问我们的静态页。

git checkout -b gh-pages
touch index.html
git add .
git commit -m "提交信息"
git push origin gh-pages

8、拉取别人的项目到本地

git clone 项目地址 项目别名

上面命令项目别名是可选的,相当于给项目根文件夹重命名。

9、向别人的项目提问

  • 在远程仓库网站进入别人的项目页面;
  • 点击 Issue 选项;
  • 输入问题标题和问题描述并点击提交;
  • 项目所有者可以回复或关闭问题。

10、更改别人的项目代码

  • 在别人项目的主页上有一个叉子的图标,操作名为 Fork
  • Fork 是在当前项目下克隆了一份,如果代码更新,不会随之更新;
  • 使用 clone 命令克隆自己的地址将项目拉到本地,进行操作;
  • 默认就是 Git 仓库而且有 origin 地址,修改后可以将代码提交到自己的仓库上;
  • 只有 Fork 关系才能修改别人代码后点击 New pull request 发送提交请求;
  • 点击 Create pull request 按钮,填写提交标题,和提交详情,确认提交;
  • 项目所有者可以在自己的项目页面中 Pull request 菜单中查看提交并处理;
  • 点击 Close pull request 关闭,点击 Merge pull request 同意提交并合并。

如果是一个团队的其他人需要操作同一个项目,上面的过程显得很繁琐,项目所有者可以在 SettingsCollaborators 选项中通过添加别人的账号或用户名向项目中添加贡献者,被添加的人拥有最大权限。


GUI 界面化

在当前的前端开发编辑器中,如 VSCode 和 WebStorm 等都集成了 Git,可以直接点击按钮操作,不必使用命令行,这种操作 Git 的界面称作 GUI 界面,个人建议还是尽量少的使用 GUI 界面,命令行是根本,还是多敲命令行,孰能生巧。


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

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,855评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,904评论 0 11
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,631评论 9 163
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,494评论 0 13
  • 下午换皮卡的轮胎螺丝 拆下蛊后发现手刹片磨没了,然后要来一套手刹片 手刹片从来没换过 所以导致上面都生锈了 特别不...
    染雨辰阅读 141评论 0 0