前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GIT操作 之 常用指令(入门级)

GIT操作 之 常用指令(入门级)

作者头像
celineWong7
发布2020-11-05 19:09:44
6760
发布2020-11-05 19:09:44
举报
文章被收录于专栏:web前端踩坑

小叶哥github库里,已详细对每个git操作做出分析(还包含了很多原理级别的)。而我自己当初,在要接触git时,也是徘徊在门外兜兜转转,最后因为工作需要,天天摸索,才总算入了门。 所以,“熟能生巧”真的一点没错。 之前把一些常用的操作记录在纸质笔记本上,平时偶尔忘记指令可以回翻。现在我把这些操作总结出来,希望对大家有所帮助。

概述

Git的整个操作要素,可以用下图的流程概括:

git-flow. 来源:阮大大博客

几个主要的结构体有:

  1. Workspace 工作区:git init后,当前文件夹(自己电脑上,眼睛看得见的那个和平常文件夹一毛一样的文件存储区域)就是工作区。
  2. Index 暂存区:一个临时放置工作区编辑后文件的区域。git add后,有变动的文件会跑到这里来。
  3. Repository 本地仓库:相当于是在自己电脑上的一个仓库。git init后,你会发现当前文件夹多了一个.git的隐形文件夹,这里就存放着本地仓库的版本相关内容。
  4. Remote 远程仓库:这个是一个联网的在某个服务器上的库,我们一般使用github或者gitlab等。若希望别人能远程下载clone你的文件,就必须放到远程仓库。

接下来,我们简单捋一捋这个过程: 下行路程:作为小前端的我在本地电脑(工作区)上的一个文件夹下进行初始化git init,紧接着马不停蹄的撸了一把代码,保存为file.html ------------> 通过 add ,把file.html放到了暂存区 ------------> 然后又通过 commit,把file.html送到了本地仓库 ------------> 最后通过 push,把file.html推送到了远程仓库。

上行路程:这个月拿到激励金的我买了台笔记本,想把之前撸过的file.html工程下载到这台电脑上。先获得远程库里对应工程的地址(一个xxx.git的下载地址)------------> 通过 clone ,把file.html所在工程下载到了本地仓库(操作指令的文件路径下,会自动初始化为本地仓库)。------------> 通过 checkout ,把file.html检出到了工作区

常用指令说明

我的入门参考过阮大大博客,也入手过图灵的教材。但真正比较有感知的还是廖雪峰大大的git教程系列。这个教程虽然有一点点年代了,但作为入门一点都不过时。只要按照步骤一步一步的走一遍,就能大体体味Git操作到底是什么个鬼东西了。 此处我是精炼出指令来,以备查阅。

1 创建版本库

代码语言:javascript
复制
#初始化版本库
git init

#添加工作区变动到暂存区
git add

#添加暂存区内容到本地仓库
git commit

#查看仓库状态(工作区的变动文件是红色,暂存区的文件是绿色,也会有相关提示操作的语句)
git status

#查看文件修改(本地仓库和工作区比较)
git diff file1.txt

2 版本回退

代码语言:javascript
复制
#查看提交日志(`git commit` 时,附录的说明)
git log

#查看提交日志(单行显示,看起来会更简洁)
git log --pretty=oneline

#回退上一个版本
git reset --hard HEAD^

# HEAD     当前版本
# HEAD^    上一个版本
# HEAD^^   上上一个版本
# HEAD~100 往上100个版本

#查看每一次命令(可以查看commit id,用以查找版本)
git reflog

#指定到commit id为3628164版本(实际的commit id数字串很长,可以不写全)
git reset --hard 368164

3 撤销修改

代码语言:javascript
复制
#把工作区的修改撤销(丢弃工作区修改)
git checkout -- file1.txt

# 注意:
# 1. 若file1.txt没有add,上面的指令会让工作区回到版本库相同的状态;
# 2. 若file1.txt已经add到了暂存区,上面的指令会让工作区回到暂存区状态上
# 补充说明:checkout 是检出的意思,也就是从本地仓库提取指定文件来覆盖工作区的文件。
#           暂存区是工作区和本地仓库中间的一个桥梁,所以检出时候会先到暂存区去探究下,若没有再到本地仓库取。

#把暂存区的修改撤销,修改只保留在了工作区
git reset HEAD file1.txt

#若希望把已添加暂存区的修改丢弃,就得分别执行两步: 先撤销暂存区的修改(此时修改还在工作区),再撤销工作区的修改。
git reset HEAD file1.txt
git checkout -- file1.txt

# 注意:以上两行代码会让临时修改的代码彻底消失,谨慎操作。

4 删文件

代码语言:javascript
复制
#1. 直接在工作区的文件夹把文件删除(右键-删除)

#2. 若确定要删除,继续执行以下指令
git rm file2.txt
git commit 

#3. 若误删了,可以使用撤销修改
git checkout -- file2.txt

5 远程库 origin

5.1 添加远程库
代码语言:javascript
复制
#1. 关联
git remote add origin git@server:path/repo.git

#2. 第一次推送 -u:是对本地master与远程master分支进行关联
git push -u origin master

#3. 以后的推送
git push origin master

# 或者
git push
5.2克隆远程库
代码语言:javascript
复制
#1. 关联
git clone git@server:path/repo.git

#也支持https协议,但速度会偏慢
5.3查看远程库
代码语言:javascript
复制
# 列出远程库,远程库默认名称origin
git remote

#显示远程库信息
git remote -v

#查看远程库详细信息
git remote show [origin]
5.4 向远程库推送分支
代码语言:javascript
复制
# 推送 master 分支
git push origin master

# 推送 dev 分支
git push origin dev
5.5从远程库拉取分支
代码语言:javascript
复制
# 方法一
# 获取远程所有分支
git fetch

# 查看所有远程分支
git branch -r

# 在本地新建一个同名分支,并与该远程分支关联
git checkout same_name_origin
#注意:不要使用 git checkout origin/mybranch ,会进入detached head状态,不会在本地新建分支。



# 方法二
# 语法
git checkout -b 本地分支名 origin/远程分支名

# 比如
git checkout -b dev2 origin/dev2

6 分支管理 branch

6.1 创建、合并分支
代码语言:javascript
复制
# 创建并切换到分支dev
git checkout -b dev

# 上面的指令等于下面两条指令的集合

# 创建分支
git branch dev

# 切换分支
git checkout dev

# 查看当前所有分支
git branch

# 查看当前所有分支,包括远程分支
git branch -a

# 推送分支:把dev分支推送到远程库
git push origin dev


# ... 在dev分支上做编辑,并add、commit等操作后

# 切回master分支
git checkout master

# ... dev分支上的修改不会出现在master分支上


# 把dev分支合并到master分支:可以把dev上的修改同步到master
git merge dev

# 删除dev分支(注意:不能在dev分支上删除dev分支)
git branch -d dev
6.2 查看两个分支区别
代码语言:javascript
复制
# 查看两个分支区别,将结果输出到指定文件
#1. 覆盖方式:若执行指令的路径下已经有file1.diff,会进行覆盖
git diff [branchA] [branchB] > file1.diff

#2. 追加方式
git diff [branchA] [branchB] >> file1.diff

#3. 显示出所有有差异的文件列表
git diff branch1 branch2 --stat 

#4. 显示指定文件的详细差异
git diff branch1 branch2  [filepath] 

#5. 显示出所有有差异的文件的详细差异
git diff branch1 branch2

# 查看分支创建时间
git reflog show --date=iso branchA
6.3 解决合并冲突

当使用merge操作合并时,若两个分支修改了相同位置内容,就会出现冲突。 可以具体查看发生冲突的文件,文件里头会有<<<< ==== >>>> 来标记出同一位置,不同分支各自的内容块。然后由我们来选择保留想要留下的内容,删除不要的内容以及标记符号。保存、add、commit,即可。

代码语言:javascript
复制
# ... 假设当前在master分支上,要合并dev分支
git merge dev

# ... 发生了冲突
# 1. 查看冲突发生文件:一般在进行git merge 时就会有提示文字
git status

# 2. 处理冲突:打开产生冲突的文件,进行主观编辑,然后保存

# 3. 之后进行正常的更新文件操作
git add
git commit -m "fix conflict"

# 最后,如果想要查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
6.4 分支管理策略

分支是版本管理工具的一大特色。如何来管理分支,不同人不同团队采用的也不一样。 有两篇博文可以参考下:源代码主干分支开发四大模式 和 英文版的 A successful Git branching model

团队开发中,一般会有以下几种分支分类(仅供参考):

  1. master - 主分支,时刻与远处同步
  2. dev - 开发分支,团队成员在此分支上工作
  3. bug - 本地修复bug分支,可以不推送到远程
  4. feature - 新功能分支,若是团队合作,可以push到远程

关于分支合并,分为两种模式:快速模式和普通模式。

代码语言:javascript
复制
# 快速模式:上面使用的合并模式。
git merge dev

# 普通模式:以非 “Fastforward” 模式合并,合并后历史记录有分支,能看出合并过
git merge --no-ff -m "merge with noff" dev

# 目前我都是用普通模式。 0 0 因为我使用快速模式的时候,都会自动进入 -m 编写提示文字模块。还没有去仔细研究为何这样。
6.5 Bug分支 git stash:保存工作现场

场景模拟: ... 在dev分支上热火朝天干活ING ... 但完整模块还没有完成,并不想提交 ... 但线上出现紧急bug需要修复,必须切到master分支修改bug ... ... 该如何是好 ... 别怕!我们有 git stash 来保存当前工作现场

代码语言:javascript
复制
# 在dev分支上,保存当前工作现场
git stash


# ... 切到master分支上,进行bug修复 ...
git checkout master

# 创建修复bug新分支 issue-101
git checkout -b issue-101

# ... 修改代码后
git add
git commit -m "fix bug 101"
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101


# ... 切回到dev分支,要继续之前的工作 ...
git checkout dev

# 查看保存的工作现场
git stash list

# 恢复并删除stash内容
git stash pop


# 以上 git stash pop 等同于下面两条指令

# 恢复工作现场
git stash apply

# 删除stash内容
git stash drop

注意:在dev分支创建的stash内容,是属于本地库的,而不隶属于分支。所以如果当前的工作现场,我希望在其他分支进行编辑提交,就可以在其他分支上进行 git stash pop

6.6 给分支添加描述
代码语言:javascript
复制
#给当前分支添加描述
git branch --edit-description

#执行上面指令,界面会进入一个编辑界面,可以按【insert】键,然后在里面噼里啪啦写下你的感言
#写完后,【Q】键退出编辑,然后输入":wq!"保存退出。

#查看分支描述
git config branch.<branch>.description

注意:

  1. 分支描述是保存在.git/config下的,是本地存储,所以不能被推送。当删除分支时,对应的分支描述也会一起删除。
  2. 设置 git config --global branchdesc true, 就可以将此描述推送到合并提交。即git merge --log<branch>,分支描述会添加到合并提交消息。(此条规则我还没有测试,你们可以先测测看。)

7 标签 Tag

标签的作用相当是 commit版本号的一个别称,能方便我们回退到指定的commit。

7.1 创建标签
代码语言:javascript
复制
# 切换到要打标签的分支上
git checkout master

# 给最新提交打上标签 v1.0
git tag v1.0


# 若想给历史提交打标签,可以git log查看其版本号
git log --pretty=oneline --abbrev-commit

# 假如查阅到的 commit id 是 6224937****
git tag v0.9 6224937

# 查看标签
git tag

# 查看标签信息
git show v0.9

# 创建带有说明文字的标签
git tag -a v1.0 -m "version 1.0 released"

# 把标签推送到远程
git push origin v0.1

# 一次性全部推送
git push origin --tags

# 获取远程tag
git fetch origin tag <tagname>
7.2 删除标签
代码语言:javascript
复制
#本地删除标签
git tag -d v1.0

# 若标签已推送到远程,要删除就得两步:先本地删除、再远程删除
git tag -d v1.0
git push origin :refs/tags/v1.0
7.3 删除远程tag
代码语言:javascript
复制
git push origin --delete tag <tagname>

也可以使用推送一个空分支到远程分支,其实就相当于删除远程分支:

代码语言:javascript
复制
# 推送一个空分支到远程分支
git push origin :<branchName>

# 推送一个空tag到远程tag
git tag -d <tagname>
git push origin :refs/tags/<tagname>

以上两种语法,作用完全相同。

8 远程分支的相关操作

8.1 查看远程分支

加上 -a 参数可以查看远程分支,远程分支会用红色表示出来(如果开了颜色支持的话)

代码语言:javascript
复制
git branch -a
8.2 删除远程分支
代码语言:javascript
复制
git push origin --delete <branchName>
(8) 查看分支的创建时间
代码语言:javascript
复制
git reflog show --date=iso master

参考文章:

  1. 廖雪峰大大的Git教程
  2. Git查看、删除、重命名远程分支和tag
  3. git 对比两个分支 具体某个文件的差异
  4. 使用git和github管理自己的项目---基础操作学习(segmentfault)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 常用指令说明
    • 1 创建版本库
      • 2 版本回退
        • 3 撤销修改
          • 4 删文件
            • 5 远程库 origin
              • 6 分支管理 branch
                • 7 标签 Tag
                  • 8 远程分支的相关操作
                  相关产品与服务
                  文件存储
                  文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档