git

作者: 阿里王成文 | 来源:发表于2018-06-03 16:40 被阅读0次

    Git资料整理

    在这里,我整理的并不是很多,大家可以稍微借鉴一下就好,git命令用得好可以偷点懒罢了。

    操作流程

    一图胜千言,你常用的几个命令大概就是这样的。这是阮一峰给出的样子:

    image.jpg 官方git-scm是这样的: image.png

    只表明了一般的git本地操作流程: 1. 在工作目录中修改文件 2. 暂存文件,将文件的快照放入暂存区域 3. 提交更新,找到暂存区域的文件,将快照永久性存储到git仓库目录

    命令清单

    配置

    .gitconfig配置文件,可以是电脑上的全局配置,或者项目目录下的项目配置 git config --list用于查看全局配置 我电脑上是log出:

    credential.helper=osxkeychain
    user.email=nanci_guo@xinyan.com
    user.name=guonanci
    push.default=matching
    alias.s=status
    alias.t=tag
    alias.ck=checkout
    alias.cm=commit
    alias.ps=push
    alias.pl=pull
    alias.d=diff
    alias.l=log
    alias.rs=reset
    alias.rv=revert
    alias.m=merge
    alias.unstage=reset HEAD --
    alias.last=log -1 HEAD
    url.https://.insteadof=git://
    last.unstage=log -1 HEAD
    core.repositoryformatversion=0
    core.filemode=true
    core.bare=false
    core.logallrefupdates=true
    core.ignorecase=true
    core.precomposeunicode=true
    remote.origin.url=git@gitlab.xinyan.com:spider/SDK_H5.git
    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
    branch.master.remote=origin
    branch.master.merge=refs/heads/master
    

    你们在windows也试试,大致应该差不多

    增加删除文件

    # 添加指定文件/目录到暂存区
    $ git add [file1] [dir1] [file2] ...
    

    代码提交

    git commit -m [msg]是提交暂存区到仓库区,git commit [file1] [dir1] [file2] ... -m [msg]是提交暂存区的指定文件到仓库区,git commit -a是提交工作区自上次commit之后的变化,直接到仓库区,git commit --amend -m [msg]是使用一次新的commit,替代上一次提交,如果代码没有任何变化,则用来改写上一次commit的提交信息,`git commit –amend [file1] [file2]是重做一次commit,并包括指定文件的新变化,其实如果不太注重commit message的话,–amend这个标志位几乎没什么用了。

    分支

    // 列出所有本地分支
    git branch
    // 列出所有远程分支
    git branch -r
    // 列出所有本地和远程分支
    git branch -a
    // 新建一个分支,但依然停留在当前分支
    git branch [new-branch-name]
    // 从指定分支新建一个分支,切换到新分支,与同名远程分支建立追踪关系
    git checkout -b [new-branch-name] [base-branch-name:可选] && git push -u origin [new-branch-name]
    // 合并指定分支到当前分支
    git merge [branch-to-merge]
    // 删除本地和远程的同名分支, 
    git branch -d [branch-name] && git push origin :[branch-name]
    
    

    查看信息

    // 显示有变更的文件
    git status
    // 显示暂存区和工作区的差异
    git diff
    // 显示工作区和当前分支最新commit之间的差异
    git diff HEAD
    // 显示指定文件的每一行代码是谁在哪个时间改过,信息有点多哦。。
    git blame [file]
    

    远程同步

    // 下载远程仓库的所有变动
    git fetch [remote]
    // 显示所有远程仓库
    git remote -v
    // 显示某个远程仓库的信息
    git remote show [remote]
    // 增加一个新的远程仓库,并命名
    git remote add [shortname] [url]
    // 取回远程仓库的变化,并与本地分支合并
    git pull [remote] [branch]
    // 上传本地指定分支到远程仓库
    git push [remote] --force
    // 推送所有远程分支到远程仓库
    git push [remote] --all 
    

    撤销

    // 恢复暂存区的指定文件到工作区,我经常用
    git checkout [file1] [dir1] ... 
    // or 
    git checkout .
    // 重置暂存区的指定文件,与上一次的commit保持一致,但工作区不变
    git reset [file]
    // 重置当前分支的HEAD为指定commit,同时重置暂存区与工作区,与指定commit保持一致
    git reset --hard [comit-log]
    
    // 新建一个commit,用来撤销指定commit,后者的所有变化都被前者抵消,并且应用到当前分支
    git revert [commit]
    

    git 远程操作

    git clone,git remote

    // ssh,https,git,本地协议都支持,git协议下载最快
    git clone [版本库url] [本地目录名:可选]
    
    // git remote 用于管理主机名,不带选项的时候,git remote列出所有远程主机
    
    git remote // origin 
    // -v 选项可以查看主机网址
    git remote -v
    origin git@gitlab.xinyan.com:spider/SDK_H5.git (fetch)
    origin git@gitlab.xinyan.com:spider/SDK_H5.git (push) 
    
    // 克隆版本库的时候,所使用的远程主机自动被git命名为origin,如果想用其他的主机名,需要用git clone命令的-o选项指定
    git remote -o jQuery htttps://github.com/jquery/jquery.git
    git remote
    jQuery
    
    // 可以查看该主机的详细信息
    git remote show <host-name> 
    // 添加
    git remote add <host-name> <url>
    
    // 删除
    git remote rm <host-name>
    // 改名
    git remote rename <old-name> <new-name>
    
    

    git fetch

    一旦远程主机的版本库有了commit更新, 需要将这些更新取回本地,用到git fetch <remote-host> git fetch命令通常用来查看其他人的进程,因为她取回的代码对你本地的开发代码没有影响。默认情况下,git fetch取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名:git fetch <remote-host> <branch-name>。所取回的更新,需要在本地主机上用<q style="-webkit-print-color-adjust: exact;">远程主机名/分支名</q>的形式读取。

    git pull

    取回远程主机某个分支的更新,再与本地的指定分支合并git pull <remote-host> <remote-branch>:<local-branch>。如果远程分支与当前分支合并,则冒号后面的部分可以省略:

    git pull origin next
    
    git fetch origin
    git merge origin/next
    

    在某些场合,git会自动在本地分支和远程分支之间,建立追踪关系tracking,比如在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系 也允许手动建立追踪关系:git branch --set-upstream master origin/next 如果当前分支远程分支存在追踪关系,git pull就可以省略远程分支名:git pull origin,如果当前分支只有一个追踪分支,连远程主机名都可以省略:git pull,上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

    如果远程主机删除了某个分支,默认情况下git pull的时候不会在拉取远程分支的时候删除对应的本地分支,是为了防止由于其他人操作了远程主机导致git pull不知不觉删除了本地分支,当然可以加上选项 -p就会在本地删除远程已经删除的分支:

    git pull -p 
    // or 
    git fetch --prune origin
    git fetch -p
    

    git push

    用于将本地分支的更新推送到远程主机,格式与git pull命令相仿:

    git push <remote-host> <local-branch>:<remote-branch>
    

    分支推送的顺序是<from>:<to>git pull对应<remote-branch>:<local-branch>git push对应<local-branch>:<remote-branch>,如果省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。git push origin master,上面命令表示将本地的master分支推送到origin主机的master分支。 如果省略本地分支名,则表示删除指定的远程分支,等同于推送一个空的本地分支到远程分支。

    git push origin :master
    // or 
    git push origin --delete master
    

    如果当前分之与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略:git push origin。 如果当前分支只有一个追踪分支,那么主机名都可以省略:git push

    如果当前分支与多个主机之间存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push了: git push -u origin master。不带任何参数的git push默认只推送当前分支,叫做simple方式,此外还有一种matching方式 ,现在默认使用simple方式,如果要修改,采用git config --global push.default matching/simple,还有就是不管是否存在对应的远程分支,都会推送到远程主机,需要使用 --all选项:git push --all origin,如果要推送标签,要加上--tags选项:git push origin --tags

    git 进阶

    git 特点

    近乎所有操作都只是本地执行

    比如说要浏览项目的历史,git不需要外联到服务器去获取历史,只需要直接从本地数据库中读取。

    git保证完整性

    git中所有数据在存储前都计算校验和,然后以校验和来引用。意味着不可能在git不知情时更改文件内容或者目录内容。这个功能构建在git底层。是构成git哲学不可或缺的部分,如果在传输过程中丢失信息或者损坏文件,git就能发现。 git用以计算校验和的机制叫做SHA-1散列(哈希hash),他是一个由40个十六进制字符(0-9和a-f)组成字符串,基于git中文件的内容或者目录结构计算出来。

    进阶部分不好整理,有点多,难度比较大,大家可以自己稍微看看我推荐的progit.zh.pdf 还有 git-scm中文文档,不过说到底git只是个工具,遇到问题可以及时解决就行。

    提升效率的工具方面

    其实自己手打也差不多, 可以利用之前提及的git config –list里面的alias,比如: git pl && git add . && git cm -m "commit message" && git ps; && 符号是说上一条命令执行成功才会执行下一条 Mac上有oh-my-zsh这个很方便的命令行alias全局配置工具,还有iterm2终端app, 参考下面的文章: item2安装及使用 oh-my-zsh安装 oh-my-zsh配置

    我在项目里面配置了ci.sh 和 test.sh prd.sh 可以用于日常的提交代码,推送到test分支发布测试环境,推送到prd分支发布生产环境。windows的话推荐强大的Cygwin这里也有一篇有关Cygwin的短文,

    windows上我找到这篇文章,特别短,主要是alias方面。

    不过我觉得如果你的IDE自带终端还有git操作比较方便的话还是用IDE吧,不用命令行也可以。 如果用命令行的话,推荐git-bash这里有篇短文,推荐一下。

    参考资料

    书籍 文档 链接
    progit.zh.pdf git-scm.com/book 阮一峰-常用git命令清单

    郭南赐 2018.06.02

    相关文章

      网友评论

          本文标题:git

          本文链接:https://www.haomeiwen.com/subject/vqwjsftx.html