git 分支切换和 提交代码到远程分支 撤销add reset 撤销修改 打标签 补标签git tag

Talk is cheap, show me the code.

  1. 创建分支

    git branch yourlocalbranch

  2. 切换分支

    git checkoutyourlocalbranch

  3. 创建分支并切换到该分支,等效于上面两个命令都执行

    git checkout -byourlocalbranch

  4. 在本地更改完分支的代码后,add并commit后,需要合并分支到主干的话执行

    git checkout master 
    git merge yourlocalbranch //合并分支到当前分支

  5. 无需合并至主干,直接将本地分支提交到远程仓库的新分支的话执行

    git push origin localbranch:remotebranch //将本地分支yourlocalbranch提交到远程分支remotebranch,如果远程没有改分支则自动创建

  6. 查看本地所有分支以及当前所在分支

    git branch //当前分支前有 * 号

  7. 删除本地分支

    git branch -Dyourlocalbranch

  8. 删除远程分支

    git push origin :remotebranch //不加本地分支时进行提交即删除远程分支


    二 ,git放弃修改

    如果在修改时发现修改错误,而要放弃本地修改时

    一,

    未使用 git add 缓存代码时。

    可以使用 git checkout -- filepathname (比如: git checkout -- readme.md  ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所以的文件修改可以使用 git checkout .  命令。

    此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

     

    二,

    已经使用了  git add 缓存了代码。

    可以使用  git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。

    此命令用来清除 git  对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

     

    三,

    已经用 git commit  提交了代码。

    可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset --hard  commitid 

    你可以使用 git log 命令来查看git的提交历史。git log 的输出如下,之一这里可以看到第一行就是 commitid:

    复制代码

    commit cf0d692e982d8e372a07aaa6901c395eec73e356 (HEAD -> master)
    Author: toyflivver <2440659688@qq.com>
    Date: Thu Sep 28 14:07:14 2017 +0800

    多余的空行

    commit 14aa4d7ad4ac6fba59b4b8261d32e478e8cc99ff
    Author: toyflivver <2440659688@qq.com>
    Date: Thu Sep 28 14:06:44 2017 +0800

    正常的代码

    commit da3a95c84b6a92934ee30b6728e258bcda75f276
    Author: toyflivver <2440659688@qq.com>
    Date: Thu Sep 28 13:58:12 2017 +0800

    qbf

    commit 267466352079296520320991a75321485224d6c6
    Author: toyflivver <2440659688@qq.com>
    Date: Thu Sep 28 13:40:09 2017 +0800

    qbf



    撤销修改
  9. git reset HEAD .(有一个点. )撤销已经add的修改
Git checkout - - fileName撤销该文件的修改
git checkout . 撤销所有修改。


分支切换

git branch 和 git checkout经常在一起使用,所以在此将它们合在一起

  1.Git branch

    一般用于分支的操作,比如创建分支,查看分支等等,

    1.1 git branch

      不带参数:列出本地已经存在的分支,并且在当前分支的前面用"*"标记

    1.2 git branch -r 

      查看远程版本库分支列表

    1.3 git branch -a

      查看所有分支列表,包括本地和远程

    1.4 git branch dev

      创建名为dev的分支,创建分支时需要是最新的环境,创建分支但依然停留在当前分支

    1.5 git branch -d dev

      删除dev分支,如果在分支中有一些未merge的提交,那么会删除分支失败,此时可以使用 git branch -D dev:强制删除dev分支,

    1.6 git branch -vv 

      可以查看本地分支对应的远程分支

    1.7 git branch -m oldName newName

      给分支重命名

  2. Git checkout

    1. 操作文件  2. 操作分支

    2.1 操作文件

      2.1.1 git checkout filename 放弃单个文件的修改

      2.1.2 git checkout . 放弃当前目录下的修改

    2.2 操作分支

      2.2.1 git checkout master 将分支切换到master

      2.2.2 git checkout -b master 如果分支存在则只切换分支,若不存在则创建并切换到master分支,repo start是对git checkout -b这个命令的封装,将所有仓库的分支都切换到master,master是分支名,

    2.3 查看帮助

      git checkout --help

      当然git checkout还有许多命令,但这些已经能满足我们日常开发所需




/*****************分割线**********************/

git cat-file

git cat-file -t <commit>,查看Git对象的类型,主要的git对象包括tree,commit,parent,和blob等。
git cat-file -p <commit>,查看Git对象的内容

git log

git log主要用来显示分支中提交更改的记录。当执行git commit以存储一个快照的时候,文件详单、提交消息和提交者的信息、此次提交所基于的快照都会被保存。
git log --oneline,可以显示更加短小的提交ID.
git log --graph,显示何时出现了分支和合并等信息.
git log --pretty=raw,显示提交对象的parent属性.

git config

git config -e
git config -e --global
git config -e --system
Git的三个配置文件分别是版本库级别的配置文件(/.git/config)、全局配置文件(用户主目录下)和系统级配置文件(/etc目录下)。这个命令的作用是打开相应的配置文件,并且进行编辑。其中版本库级别的配置文件的优先级最高,全局配置文件次之,系统级别配置文件最低。Git配置文件采用的是INI文件格式。

git config <section>.<key>,读取和更改INI配置文件的内容。
git config <section>.<key> <value>,修改INI配置文件中某个配置的键值

在全局空间中添加新的用户
git config --global user.name "harvey liu"
git config --global user.email harvey_liu@163.com

设置git命令的别名
git config --global alias.ci commit
git config --global alias.co checkout

删除git全局配置文件中的用户名
git config --unset --global user.name
git config --unset --global user.email

git grep

git grep可以用来搜索工作区中的文件内容
要查找git仓库里某个特定版本里的内容, 我们可以像下面一样在命令行末尾加上标签名(tag reference),git grep '文字内容' v1.0

git diff


git diff,显示工作区和暂存区的差异
git diff HEAD,显示工作区和HEAD之间的差异
git diff --cached,显示暂存区和HEAD之间的差异
git diff id1 id2,显示两次提交之间的差异

git status

git status,查看你的代码在缓存与当前工作目录的状态
git status -s,将结果以简短的形式输出

git add

git add,在提交你修改的文件之前,你需要把它们添加到暂存区。如果该文件是新创建的,你可以执行将该文件添加到暂存区
git add . ,Git会递归地将你执行命令时所在的目录中的所有文件添加上去,所以如果你将当前的工作目录作为参数,它就会追踪那儿的所有文件
git add -u,使用-u参数调用了git add命令,会将本地有改动(包括删除和修改)的已经追踪的文件标记到暂存区中。
git add -A,使用-A参数会将添加所有改动的已跟踪文件和未跟踪文件。
git add -i,交互式的方式进行添加。

git commit

git commit --amend,修补式提交。
git commit --a,对本地所有变更的文件执行提交操作,包括对本地修改的文件和删除的文件,但是不包括未被版本库跟踪的文件。但是这个命令最好不要使用,这样会丢掉Git暂存区带给用户的最大好处:对提交内容进行控制的能力
git commit --allow-empty,允许执行空白提交

git reset

把当前分支指向另一个位置,并且有选择的变动工作目录和索引
git reset --hard <commit>,其中commit是可选项,可以使用引用或者提交ID,如果省略则相当于使用了HEAD的指向作为提交ID,完成的操作包括替换引用的指向,替换暂存区,替换工作区
git reset --soft <commit>,其中commit是可选项,可以使用引用或者提交ID,如果省略则相当于使用了HEAD的指向作为提交ID。完成的操作主要是更改引用的指向,不改变暂存区和工作区
git reset,等同于git reset HEAD,用HEAD指向的目录树重置暂存区

git reset -- filename,将文件filename的改动撤出暂存区,暂存区其他文件不变
git reset HEAD --filename 等同于git reset -- filename

git branch

git branch,显示当前所在的分支
git branch <branchname>,创建新的分支branchname
git branch <branchname> <start-point>,基于提交<start-point>创建新分支,新分支的分支名为<branchname>
git branch -d <branchname> ,删除名称为branchname的分支,删除时会检查所有的删除分支是否已经合并到其他分支,否则拒绝删除
git branch -D <branchname>,强制删除分支<branchname>
git branch -m <oldbranch> <newbranch>,重命名分支

git checkout

git checkout branchname,会改变HEAD头指针,主要用于切换分支
git checkout -b branchname,用于创建一个新的分支,并且切换到创建的新的分支上

git checkout --filename,用暂存区中的filename文件来覆盖工作区中的filename文件
git checkout <commit> --filename,用指定提交中的文件覆盖暂存区和工作区中对应的文件
git checkout -- .或者git checkout .,用暂存区的所有文件直接覆盖本地文件,取消所有的本地的修改,是一条危险的操作

git clean

删除本地多余的目录和文件
git clean -nd,显示要删除的内容,但是是预删除
git clean -fd,强制删除多余的文件和目录

git rm

rm命令删除的文件只是在本地进行了删除,尚未添加到暂存区,也就是说,直接在工作区删除,对暂存区和版本库没有任何影响。
git rm命令会将删除动作加入暂存区,这是执行提交动作,就从真正意义上执行了文件删除。

git mv

git mv,移动文件,git中以git rm和git add两条命令取而代之。

git archive

git archive,对任意提交对应的目录树建立归档。
git archive -o latest.zip HEAD,基于最新提交建立归档文件latest.zip
git archive -o partial.tar HEAD src doc,只将目录src和doc建立到归档文件partial.tar中
git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz,基于里程碑v1.0建立归档,并且为归档中的文件添加目录前缀1.0

git clone

git clone <repository> <directory>,将repository指向的版本库创建一个克隆到directory目录中。目录directory相当于克隆版本库的工作区,文件都会检出,版本库位于工作区下得.git目录中。
git clone --bare <repository> <directory.git>
git clone --mirror <repository> <directory.git>
上面的两种克隆版本都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。

git push

git push <remote> [branch],就会将你的 [branch] 分支推送成为 [alias] 远端上的 [branch] 分支,要推送的远程版本号的URL地址由remote.<remote>.pushurl给出,如果没有配置,则使用remote.<remote>.url配置的URL地址。

git pull

git pull,从远端的服务器上下载数据,从而实现同步更新。要获取的远程版本库的URL地址由remote.<remote>.url提供。
 

已经提交到远程的代码回滚

1.git revert

git revert HEAD 撤销前一次 commit

git revert HEAD^ 撤销前前一次 commit

git revert fa042ce57 撤销指定的版本,撤销也会作为一次提交进行保存。

与reset不同的是:

  1. revert不会舍弃原来的提交记录,而是生成了一次新的提交。

  2. reset是撤回到某个指定的版本,而revert则是将某个指定的版本撤销,也就是撤回到指定版本之前的一个版本上。



用途

标签可以针对某一时间点的版本做标记,常用于版本发布,这恰恰是我所需要的功能,将本地标签推送到Github上即发布了一个Release版本,下载和查看非常方便。

标签分类

git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象,建议使用附注标签,日后还可以查看标签信息。

创建标签

  • 创建轻量标签

    $ git tag v0.2.0 -light

    解释:创建轻量标签不需要传递参数,直接指定标签名称即可。

  • 创建附注标签

    $ git tag -a v0.1.0 -m "release 0.1.0 version"

    解释:创建附注标签时,参数-a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

查看标签

  • 列出当前仓库的所有标签

    $ git tag

  • 列出符合模式的标签

    $ git tag -l 'v0.1.*'

  • 查看标签版本信息

    $ git show v0.1.0

切换标签

  • 切换标签与切换分支命令相同

    $ git checkout [tagname]

    解释:切换标签后处于一个空的分支上,即”You are in ‘detached HEAD’ state.”

删除标签

  • 误打或需要修改标签时,需要先将标签删除,再打新标签

    $ git tag -d v0.1.2

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

补打标签

  • 给指定的commit打标签

    $ git tag -a v0.1.0 49e0cd22f6bd9510fe65084e023d9c4316b446a6

    解释:打标签不必要在HEAD之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和,通过git log命令获取。

发布标签

  • 将v0.1.0标签提交到git服务器

    $ git push origin v0.1.0

    解释:通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作。

  • 将本地所有标签一次性提交到git服务器

    $ git push origin –tags


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值