Git手册

  1. 本地
  2. 远程
  3. 等等
    1. Fork
    2. 关于 rebase 的优缺点
    3. 其它一些pull的使用例子
    4. 永久记住密码+查询用户信息
    5. sparse checkout(稀疏检出)
  4. 角色权限
  5. Ref

记录一些常用的Git命令方便使用时查询,以及简单交代对应的原理,便于操作时理解实际意义。

本地

创建并切换到新分支newBranchName

git checkout -b bugFix

git branch bugFix
git checkout bugFix

使用指定分支创建分支,并切换

git checkout -b special master

提交版本

git commit

假设在master上要合并回bugFix的提交版本

git merge bugFix

与上一个指令同等效果,分支结构会更清晰的变基(在bugFix上进行,但因安全性和可跟踪性问题而建议少用。指令可以解读为“变基到xx分支上“,后可带一个可选参数,表示使用哪个分支进行变基)

git rebase master

查看当前HEAD指向的引用,一般的指向是HEAD->master->versionHash

git symbolic-ref HEAD

查看提交记录的哈希值

git log

相对引用切换,切换到master的上一次(如果上一次有两个父节点,可添加数字指定)和前3次的提交记录,或指定hash(支持只输入前4位),还可以链式操作

git checkout master^
git checkout master~3
git checkout f2e1
git checkout HEAD~^2~2

强制变更分支指向的提交(相对引用方式)

git branch -f master HEAD~3

回退版本,改写本地历史

git reset HEAD~1

撤销远端的更改,还原版本

git revert HEAD

复制版本,控制顺序

git cherry-pick C2 C4

交互式的rebase,在不清楚版本hash时又想用cherry-pick按顺序复制版本时使用(会在vi编辑文件下配置要复制的版本的顺序,利用参数–interactive或-i)

git rebase -i branch/HEAD~4

若漏掉了文件没有加,或者提交信息写错了,想要撤消刚才的提交操作,可以使用 –amend 选项重新提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明

git commit --amend

永久指向提交版本的Tag

git tag tagV1 verC1

查找最近的标签,输出样式,<tag>_<numCommits>_g<hash>(hash是下面ref的哈希值)

git describe <ref>

强制变更分支指向

git branch -f feature C2

远程

克隆本地路径时是真正的拷贝,克隆远端时是复制远端的版本到本地形成关联。而且克隆后,本地会自动将远端分支命名为origin/master,origin是远端仓库的默认名称,所以本地的master分支并不是项目的真正master分支,若尝试手动切换到origin/master,只会产生与其相同引用的分离HEAD状态,因为Git不允许直接在远端项目上操作。

git clone git_url

从远程仓库获取数据(下载缺失的提交记录,并更新本地的远程分支指针。但不会改动本地仓库的状态,因为怕你还没完成本地的版本)

git fetch
git fetch origin foo

抓取远程仓库的更新并合并到本地分支新建一个版本提交记录(=fetch + merge)。如果不想用合并的方式,可以在后面加上参数–rebase,将本地当前的提交记录变基到远端的偏离历史的提交记录上,这样的提交轨迹线会相对清晰。

git pull
git pull --rebase

将本地变更上传到指定的远程仓库。若使用指定source和destination的方式时 (比较少用到),需要遵循下面的格式,使用冒号分隔,destination是指需更新的远端分支名称,但不需加origin/前缀标识,而原来已经在跟踪该远端的同名本地分支不会有所变动,source则可以是任何一个提交记录。

git push
git push <remote> <place>
git push origin master
git push origin <source>:<destination>

追踪远程分支(下面指令意思是创建分支foo,并通过参数-u设置跟踪origin/master,如果当前就在foo上还可以省略掉foo)

git branch -u origin/master foo

删除远端分支;创建本地分支。

git push origin :foo

git fetch origin :bar

列出远程主机 (如 origin)

git remote
git remote -v

关联远程分支(默认master)

git remote add origin url.git

等等

Fork

Github或一些git管理工具,远程仓库是不允许代码贡献者直接push的(作者自己的本地则没有限制),而是发起一个pull request,让项目作者自己fetch&merge/pull贡献者代码(像是反过来一样,要合并外部的代码时,外部的代码视作一个远端仓库,而它则是贡献者在开发前期进行fork所创建,fork类似clone)。

关于 rebase 的优缺点

优点:Rebase 使你的提交树变得很干净, 所有的提交都在一条线上
缺点:Rebase 修改了提交树的历史(比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的,但实际上是在 C3 之前。)
如果喜欢保留提交历史,可以选用merge代替。

其它一些pull的使用例子

(复杂版的fetch + merge)

git pull origin foo = git fetch origin foo; git merge o/foo

git pull origin bar~1:bugFix = git fetch origin bar~1:bugFix; git merge bugFix

永久记住密码+查询用户信息

git config --global credential.helper store

git config user.name
git config user.email

删除密码,只要在仓库的.git/config文件中删除[credential] helper = store这行内容即可,这样每次对git源提交记录版本时都需要输入密码。修改密码则是先删除该项,然后操作一次git源,再补回该项,这样下次输的新密码就被记录起来了。

sparse checkout(稀疏检出)

$ git init <project>
$ cd <project>
$ git remote add origin ssh://<user>@<repository's url>
$ git config core.sparsecheckout true
$ echo "path1/" >> .git/info/sparse-checkout
$ echo "path2/" >> .git/info/sparse-checkout
$ git pull origin master

修改了 .git/info/sparse-checkout,增加或删除部分目录后,则

$ git checkout master 
# 或者
$ git read-tree -mu HEAD

sparse-checkout可使用通配符,如

包含法:
docs/
index.

*.gif

排除法:
/*
!/docs/

角色权限

Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限
  • Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
    Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
    Gitlab中的组和项目有三种访问权限:Private、Internal、Public

Private:只有组成员才能看到
Internal:只要登录的用户就能看到
Public:所有人都能看到
开源项目和组设置的是Internal

Ref

感谢这个Git实操练习网站
还有一峰大的Git远程操作详解
Git Book


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 mingfungliu@gmail.com

文章标题:Git手册

文章字数:1.8k

本文作者:Mingfung

发布时间:2019-01-28, 21:35:00

最后更新:2019-11-29, 22:26:52

原始链接:http://blog.ifungfay.com/工具/Git手册/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

宝贝回家