热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一亩田GIT基础教程

一亩田GIT基础教程——吴振宇带*的要求理解并掌握gitclone与gitinit*初始化仓库有两种情况,一种是直接在一个空目录里建立一个项目,这时候你可以

一亩田GIT基础教程

                  ——吴振宇

带*的要求理解并掌握

git clone 与 git init*

初始化仓库有两种情况,一种是直接在一个空目录里建立一个项目,这时候你可以这样干:

git init 这个目录就被git管理起来了

另一种是从其他机器复制一个仓库,比如这样

git clone git@github.com:ymt360/www.git


git remote 远程仓管*

如果你是从其他服务器复制过来的仓库,这个服务器地址会自动添加到你的仓库中,你可以这样查看:

git remote 只列出服务器端的别名,不会列出地址来

git remote -v  会列出地址

git remote add yugaohe git@github.com:codefor/www.git  添加对方的地址,yugaohe是别名 你也可以写 yugong 或者 dikfu 这样的。我们一亩田的远程仓库名约定为 upstream。

git remote rm yugaohe  删除于高禾这个远程仓库

修改远程仓库

git remote set-url origin URL  或者另一种方式 : 先删除这个远程仓库 再add


GIT 跟踪文件的状态

Modified(working directory):被修改过的文件

Staged(staging area):通过git add添加到暂存区域的文件

Committed(git directory):通过git commit提交到仓库的文件

可能有些人会觉得很奇怪,为什么git会有暂存区域这个概念,直接提交到仓库中不就ok了。其实这是git为了做版本控制用的,试想如果没有暂存区域,每修改一个文件,就会形成一个版本,太过频繁,不易于管理。暂存区域其实就是下一个版本的文件清单,你可以自由控制该往仓库中提交什么文件,这也可以避免在一个版本中包含一些中间文件,比如编译后的文件。


git add 与 git commit *

git add 将你写好的程序文件 或者修改的文件添加到git暂存区

通过git commit提交到仓库的文件  切记commit只提交被add的文件,之后会让你填写提交信息。

git commit -a  同上,一般你代码里只有modify状态下的文件可以直接使用这个命令,省去了 git add + 被修改文件 的步骤。

git add 文件之后 git commit -m ‘’  是直接填写这次提交的备注信息

git commit -a -m  是git commit -a,git commit -m的合版。懒人专用,上面已经说过,只会提交已经在版本库的文件,一般就是modify状态也就是只有修改的文件 直接使用这样的命令即可。


当你不小心,写错了提交的注视/信息,该如何处理呢。理论上,SCM是不应该修改历史的信息的,提交的注释也是。
  不过在git中,其commit提供了一个--amend参数,可以修改最后一次提交的信息.但是如果你已经push过了,那么其历史最后一次,永远也不能修改了。




创建分支 与checkout*

创建分支:执行git branch 命令创建新分支

切换分支:执行git checkout 命令切换到新分支

git checkout -b [

检出命令git checkout通过参数-b 实现了创建分支和切换分支两个动作的合二为一

git checkout 的还原作用:

git checkout + 文件名 是放弃文件的修改,还原到你远程仓库的最近版本。 也可以指定远程仓库。



git pull 与git fetch 和 git merge**

git fetch:相当于是从远程获取最新版本到本地,不会自动merge   
git fetch upstream develop
git log -p develop..upstream/develop
git merge origin/master

以上命令的含义:
首先从远程的upstream的develop开发支下载最新的版本到本地develop分支上

然后比较本地的develop分支和upstream/develop分支的差别
最后进行合并

上述过程其实可以用以下更清晰的方式来进行:
git fetch upstream develop:test
git diff test
git merge test

从远程获取最新的版本到本地的test分支上
之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull upstream develop

上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并

git push 与流程**

开发完 合并完之后,你可能想提交你的代码到服务器上,这时候你要用push命令了:

git push upstream develop

但是我们一亩田的流程约定是不允许直接在develop分支开发的

我们从本地develop分支获取到最新的代码后 checkout -b 一个新分支 取名为feature-xxx

再push到你自己fork一亩田的远程仓库 然后提pull request要求上线 ,具体约定请看我们github上的 wiki文档。

假定你当前的分支为develop具体做法就是这样:

git pull upstream develp

git checkout -b feature-git-study

开发完

git pull upstream develop

git push origin feature-git-study    此origin是你自己fork的远程分支。


面的命令就是把自己master的分支提交到名字为origin的服务器上


git reset  与 git revert 

HEAD的意思为对应当前的状态下的最后一次提交。HEAD对应索引

git reset [--hard|soft|mixed|merge|keep] [或HEAD]:

将当前的分支重设(reset)到指定的或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。下http://blog.csdn.net/hudashi/article/details/7664464 具体可以查看这篇文章 下面说下我们程序中常用的操作。

reset是指将当前head的内容重置,不会留任何痕迹。

git reset --hard  去撤销这次修改 后面加版本号 可以回到那个版本下面。
但是这样做也有问题,可能之前本地的,没有提交的修改,都消失了。可以尝试git revert命令

revert是撤销某次提交,但是这次撤销也会作为一次新的提交进行保存这样就不会丢失原来修改过,但是没有提交的内容

git statsh 与 git statsh pop

开发人员常常遇到这种情况:花了几天时间一直在做一个新功能,已经改了差不多十几个文件,突然有一个bug需要紧急解决,然后给一个build测试组。在Git问世之前基本上靠手动备份,费时且容易出错。

git stash命令简而言之就是帮助开发人员暂时搁置当前已做的改动,倒退到改动前的状态,进行其他的必要操作(比如发布,或者解决一个bug,或者branch,等等),之后还可以重新载入之前搁置的改动,首先,用git add把所有的改动加到staging area。

git add .

接着用git stash把这些改动搁置。

git stash

到这里,当前工作平台就回复到改动之前了。该干嘛干嘛,此处省略1万字。

需要找回之前搁置的改动继续先前的工作了?

git stash apply 即可。

也可以用 git stash list 来查看所有的搁置版本(可能搁置了很多次,最好不要这样,容易搞混)

在出现一个搁置栈的情况下,比如如果你想找回栈中的第2个,可以用 git stash apply stash@{1}

如果想找回第1个,可以用 git stash pop

如果想删除一个stash,git stash drop

删除所有stash,git stash clear


git log*

git log为查看提交历史 如下显示

commit 16eb94854e73d9a8fd9762fba264b84a0f67e506

Author: yunnian <936321732@qq.com>

Date:   Fri Dec 5 04:24:41 2014 -0800

有版本号,有作者 有时间

git log -p -2

我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新


   


查看远程分支

git branch 是查看本地分支和当前分支 加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)

git branch -a 所有

git branch -r 远程

删除远程分支和tag

git branch -d feature-xxx 是删除本地分支


在Git v1.7.0 之后,可以使用这种语法删除远程分支:

git push origin --delete  feature-xxx  删除 远程分支或者tag这么用。两个杠加delete.

否则,下面可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:

git push origin :feature-xxx 这是删除远程分支的另一种方法,推送一个空远程分支到远程:

git push origin :feature-xxx  删除远程分支

两种放法作用完全相同。

删除不存在对应远程分支的本地分支

假设这样一种情况:
1. 我创建了本地分支b1并push到远程分支
origin/b1
2. 其他人在本地使用fetch或pull创建了本地的b1分支;
3. 我删除了
origin/b1 远程分支;
4. 其他人再次执行fetch或者pull并不会删除这个他们本地的
b1分支,运行git branch -a 也不能看出这个branch被删除了,如何处理?

用 git remote show origin 查看远程分支状态 只要是stale状态的

使用 git remote prune origin 可以将其从本地版本库中去除。



git tag — 标签相关操作

标签可以针对某一时间点的版本做标记,常用于版本发布。

列出标签

git tag  在控制台打印出当前仓库的所有标签
git tag -l ‘v0.1.*’ 搜索符合模式的标签

打标签

git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。
 创建轻量标签
 git tag v0.1.2-light

 创建附注标签
 git tag -a v0.1.2 -m “0.1.2版本”

创建轻量标签不需要传递参数,直接指定标签名称即可。
创建附注标签时,参数a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

切换到标签

与切换分支命令相同,用git checkout [tagname]
查看标签信息
用git show命令可以查看标签的版本信息:
 git show v0.1.2

删除标签

误打或需要修改标签时,需要先将标签删除,再打新标签。
 git tag -d v0.1.2  删除标签

参数d即delete的缩写,意为删除其后指定的标签。

给指定的commit打标签

打标签不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和(通过git log获取)。
 补打标签
 git tag -a v0.1.1 9fbc3d0

标签发布

通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:
 git push origin v0.1.2  将v0.1.2标签提交到git服务器
 git push origin –tags  将本地所有标签一次性提交到git服务器

 

注意:如果想看之前某个标签状态下的文件,可以这样操作

1.git tag   查看当前分支下的标签

2.git  checkout v0.21   此时会指向打v0.21标签时的代码状态,(但现在处于一个空的分支上)

3. cat  test.txt   查看某个文件








GIT 推荐配置

配置文件位置 ~/.gitconfig

[user]

    name = WuZhenyu

    email = wuzhenyu@ymt360.com

[http]

    sslverify = false

[core]

    editor = vim

[merge]

    tool = vimdiff

[diff]

    tool = vimdiff

[alias]

    br = branch

    ck = checkout

    co= commit

    st = status

[color]

    ui = true

[gui]

    encoding = utf-8

[difftool]

    prompt = false



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • Git GitHub多人协作
    在学校做一个小项目需要多人协作,就用到了gitHub,百度了一下多数写得乱七八糟或者支离破碎,于是总结了一下自己的步骤如下,第一次使用GitHUb,哪里不对望大神指出一.前期准备: ... [详细]
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
  • 前言本篇为大家总结社区多人合作常见的场景和对应的git操作命令。本篇非新手教程,阅读本篇前需具备Git基础知识。Git入门教程请参考https://www ... [详细]
  • 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.032generic/bulid: 没有那个文件或目录。 停止。”...
    编写一个简单的内核驱动模块1staticinthello_init()2{3printk(“hello,Iaminkernelnow\n”);4return0;5}6voidadd ... [详细]
  • git向远程仓库提交遇到的各种坑
    **码云***gitinit初始化本地仓库gitinit*gitremoteaddorigingitgithub.com:xueqinngchennLocal-agent.git将 ... [详细]
author-avatar
mobiledu2502872877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有