1 创建版本库:

  • 初始化一个Git仓库,使用git init命令。
  • 添加文件到Git仓库,分两步:

(1)使用命令git add <file>,注意,可反复多次使用,添加多个文件;

(2)使用命令git commit -m <message>,完成。

2 时光穿梭:

  • 要随时掌握工作区的状态,使用git status命令。
  • 如果git status告诉你有文件被修改过,用git diff <file>可以查看修改内容。

2.1 版本回退:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

在Git中,用HEAD表示当前版本, 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.2 管理修改:

  • Git是跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。

2.3 撤销修改:

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区;git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。

  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

2.4 删除文件:

  • 命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

$ rm test.txt

3 分支管理

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

3.1解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

3.2分支管理策略

Git分支十分强大,在团队开发中应该充分应用。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

3.3 Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

(用git stash list命令查看刚才保存的工作现场,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了。)

3.4 Feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

3.5 多人协作

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

小结:

  • 查看远程库信息,使用git remote -v;
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

3.6 rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

4 标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

4.1 创建标签

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..." 创建带有说明的标签,用-a指定标签名,-m指定说明文字;
  • 命令git tag可以查看所有标签。
  • 命令git show <tagname>可以查看标签信息和说明文字。
$ git tag v1.0  默认标签是打在最新提交的commit上
$ git tag v0.9 f52c633    也可以找到历史提交的commit id,然后打上标签

4.2 操作标签

  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

一个本地库同时关联到github和码云

使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:

git remote rm origin

然后,先关联GitHub的远程库:

git remote add github git@github.com:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。

接着,再关联码云的远程库:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

同样注意,远程库的名称叫gitee,不叫origin

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

git push github master

如果要推送到码云,使用命令:

git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

参考来源:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

转载于:https://www.cnblogs.com/zhenguoli/p/9139482.html

git教程——简单总结相关推荐

  1. Git 操作简单总结:廖雪峰教程

    廖雪峰Git教程:Git教程 - 廖雪峰的官方网站 命令总结: git add a.txt:添加工作区内容到暂存区 git commit -m "first commit":将暂存 ...

  2. 史上最简单的git教程搭配Github和Gitee一起食用更佳

    史上最简单的git教程 开始之前 git的最简单使用 1. 安装 2. 配置 2.1 用户信息 3. 最基本使用 Github 1. 首先你需要一个账号 2. 你需要一个仓库 Gitee 开始之前 g ...

  3. 史上最简单的git教程|第九篇:分支管理工具

    在上一篇我们讲到了如何创建合并分支.如何解决冲突以及如何删除分支,那么接下来我们将讲到一些常用的分支管理工具. 获取所有分支列表: $ git branch * b1master 可以看书一共有两个分 ...

  4. 分布式版本控制系统 Git 教程

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  5. idea 使用 git 教程

    idea 使用 git 教程 1.下载 git 下载地址: https://git-scm.com/download/win 64-bit Git for Windows Portable(简单版本) ...

  6. Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

    目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区.暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame ...

  7. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  8. Git教程(二)-如何上传和同步自己的git项目

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Git接触并使用多年, 工作中使用较多,它的分布式存储,使每个人的电脑均为服务器的策略非常棒:再加上 ...

  9. Android Studio Git教程

    Android Studio Git教程 组里经常有新人不会使用Android Studio的git工具,也有分不清rebase.merge的,写篇文章普及下.转载请注明出处. 1 安装配置 建议在 ...

最新文章

  1. 正则表达式练习 Regex Golf
  2. AXIS2整合spring需要的jar,以及大部分缺少jar所报的异常
  3. DCMTK:数据字典测试程序
  4. “甜橙金融杯”数据建模大赛发布,8万重金寻找大数据金融人才!
  5. 51. N皇后/52. N皇后 II
  6. 自动驾驶面试题汇总(2022秋招题库)——持续更新
  7. 中国约量子计算机啥水平,中国科学家捕获马约拉纳费米子 或敲开量子计算机世界大门...
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的客户关系CRM系统
  9. 利用Update Manager将ESXi 5.1 Update2升级为ESXi 6.5 Update1
  10. Python写出一个字节,一个YouTube,我用Python怎么了!
  11. Linux:(ubuntu)命令行下显示方框的问题
  12. koa操作mongodb,封装mongdb操作方法
  13. 哒哒的马蹄,由心而生的感情
  14. js控制5秒后页面自动跳转
  15. 2018年总结及2019年展望
  16. matlab length什么意思,matlab中的length什么意思?如何应用?
  17. 小白都能看懂的go语言包管理工具DEP详解
  18. 苹果召回MacBook Air 内地官网声明用英文遭指责
  19. 捏脸是如何实现的?程序化生成3D头像
  20. CentOS最新版本与历史版本下载

热门文章

  1. Python 技术篇-通过进程名称、PID杀死windows进程的两种方法,获取当前运行程序的pid
  2. Python 技术篇 - 文件的读取和写入
  3. Yen 的k_shortest paths 算法的C++实现
  4. [YTU]_2638(编程题:多态--动物叫)
  5. 4.3 matlab常用的特殊图形(条形图、直方图、饼图、散点图等)
  6. i love you 浪漫字体复制_2020高考英语全国I、II、III卷语篇来源!欢迎转发交流!...
  7. VSCode输出框中文乱码问题
  8. 【idea】idea如何配置JDK(转)
  9. Kubernetes中的nodePort,targetPort,port的区别和意义
  10. HTML5 新增内容