git学习



1对git的理解

 例如我们每天要提交代码,那么每天都有相应的任务量,但是一个完整的项目需要好多人协同并且好多天才能完成,因此我们每个人不能等到自己的代码全部写完才传到代码仓库,因此要每天向仓库提交一定的代码,知道自己的任务完成.并且git还能知道你每次提交对原有的代码进行了那些修改,如果觉的自己更新的代码不如以前的代码git还可以回退到以前的代码.
 在任意一个分支上面touch一个file文件,其他的分支上面都有这个文件,将文件git add file之后,每个分支上面还是有,但当在任意一个分支上面git commit之后,则只有那一个分支上面有文件file
---------------->这个特性造成文件的多人合作.一个文件需要不同的技术人员添加各自的模块,那么每个技术人员所处不同的分支,只需要在自己的分支上面编辑文件file,然后add添加到仓库中,最终当所有的人将模块都添加完成,此时就可以将内容merge合并提交到远程的master仓库

2申请github远程仓库

申请完成后,通常为了自己本机能够通过ssh访问远程仓库需要在远程仓库中添加自己主机的公钥。

2.1生成公钥

ssh-keygen命令,生成的公钥在目录/home/用户名/.ssh/下面,讲文件id_rsa.pub内容粘贴在SSH and GPG keys 选项栏

3.在本地创建版本库
3.1把目录变成可以管理的仓库

建一个空目录,执行git init会看到生成一个隐藏文件.git
git init

3.2配置git

配置您的名字和邮箱,这里用户名
$ git config --global user.name “xxxxxxx”
$ git config --global user.email xxxxx@example.com
查看自己的配置信息
$git config --list
配置远程仓库的别名,这样在以后push推送的操作能简便些
$git remote add 自己起的别名 https://github.com/自己的github账号/自己分支名称
例如:git remote add Git_repository https://自己的github账号/自己仓库名称
配置好后可以查看自己远程仓库的信息
$git remote -vvv
Git_repository https://github.com/xxxxxxxxxx/Git_repository (fetch)
Git_repository https://github.com/xxxxxxxxxx/Git_repository (push)
2.彩色显示:
$git config --global color.ui auto
3.定义使用命令(如 git commit)时用到的文本编辑器
git config --golbal core.editor editor_name
git config --golbal core.editor vim
4.在 Windows 下使用 Git 时不让换行符 CRLF 替换 LF
git config --global core.autocrlf false
5.在 Windows 的 Git Bash 中让非 ASCII 字符的文件名正确显示
git config --global core.quotepath off

3.3添加文件到本地git仓库

git add file1
添加之后可以通过git status查看状态。
 然后提交到本地仓库
$git commit -m “这里可以注明你提交的注释”
这里写图片描述
$git push origin master
将本地master分支推送到远程仓库origin

3.4在git仓库删除文件

git rm file1
git commit -m “delete file”
git push origin master
记得删除完后要重新push一下,不然仅仅是本地的file1删除了.远程仓库中还有file1文件

4远程仓库

可以在github上面注册.

4.1上传到远程库

查看已经存在的远程仓库,
git remote
如要查看远程仓库更加详细的信息
git remote -vvv
查看远程仓库分支信息
git remote show Git_repository,这里我的远程仓库的别名叫做Git_rewpository
显示如下:
远程 Git_repository
获取地址:https://github.com/xxxxxxxxx/Git_repository
推送地址:https://github.com/xxxxxxxxx/Git_repository
HEAD 分支:master
远程分支:
dev 已跟踪
master 已跟踪
mnt 已跟踪
mnt_test4 已跟踪
为 ‘git push’ 配置的本地引用:
dev 推送至 dev (最新)
master 推送至 master (最新)
mnt 推送至 mnt (最新)
mnt_test4 推送至 mnt_test4 (最新)

git push Git_repositoy master
推送本地master分支到远程Git_repository仓库的master分支相当于
git push Git_repositoy master:master
git push Git_repositoy dev
推送本地dev分支到远程dev分支
git push Git_repository dev:master
推送本地dev分支到远程master分支

如果本地仓库mnt分支与远程仓库Git_repository的mnt分支不一样,则会导致本地添加的新文件无法提交到远程仓库,因此需要获取远程仓库的最新版本并且合并到本地mnt分支,这样就可以提交本地mnt分支上面的新文件了
git pull Git_repository mnt

4.2更新同步远程仓库到本地

git pull Git_reposity master
git pull:相当于是从远程获取最新版本并merge到本地
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并

4.2从远程库克隆

git clone git@github.com:michaelliao/gitskills.gi

4.3删除远程仓库

git remote rm Git_repository

5创建和合并分支

git branch 查看所有分支
git checkout dev 创建分支dev
git merge dev 合并分支
git branch -d dev 删除分支dev

5.1合并分支的用途:

git checkout master
git merge mnt
通常自己的一个项目要一个星期才能完成,那么不想每天把没完成的项目推送到小组项目仓库master分支上,但是还想自己的队友知道自己的项目进行到什么地方,因此可以创建一个新的分支,mnt在这个分支写自己的项目,并且每天add,这样其他成员所处的分支也可以看见自己的项目,等项目全部完成就将mnt分支合并到master分支上面git merge mnt,然后git push master即可

5.2冲突解决

如果项目是多人合作有可能合并不了,会起冲突,例如dev分支的成员将file修改,并且git add; git commit而mnt分支的成员也将file修改并且git add ; git commit现在merge两个分支,
会出现如下错误:

自动合并 file
冲突(添加/添加):合并冲突于 file22
自动合并失败,修正冲突然后提交修正的结果
错误提示,因此要手动解决冲突

首先查看冲突git diff
1.修改的少可以直接在文件中改
2.修改的多,用mergetool工具
设置mergetool工具为vimdiff
Git config --global merge.tool vimdiff
查看所有设置
Git config --list
输入git mergetool进行文件修改
修改完成后git commit -m进行完成合并操作,然后push一下即可

6标签管理

git 的标签管理。跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′)
给某次提交打标签
git tag -a v0.1 -m “updata mnt”
查看所有标签
git tag
查看标签的详细信息
git show v0.1
后期打标签:
显示提交历史:
git log --pretty=oneline
给某次提交打标签
git tag -a v0.1 43045b(43045b是提交历史的编号)
推送标签到远程
git push Git_repository v0.1
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 所以git push origin [tagname]即可.
git push Git_repository --tags
一次性推送很多标签

通过自己的后续学习,补充后面的知识点

Git配置

  • Git 命令补全
    若使用的是 Bash shell, 可以在 Git 的源代码的 contrib/completion 目录下
    (https://github.com/git/git/tree/master/contrib/completion),
    可找到一个 git-completion.bash 文件, 将该文件保存为
    ~/.git-completion.bash, 再在 .bashrc 中加入如下一句即可:

    source ~/.git-completion.bash

Git 概念

  • 工作目录 (Working directory)
  • 暂存区 (Stage) / 索引 (Index)
  • 版本库 (Repository)
    工作目录 —(add)—> 暂存区 —(commit)—> 版本库
  • HEAD 的含义:

HEAD : 最新一次的提交
HEAD^ : 上上次的提交(倒数第二次)
HEAD^^ 或 HEAD^2 : 上上上次的提交(倒数第三次)

  • 远程仓库的名字默认为 origin (推荐使用该默认的名字)

git blame

  • 查看某特定文件被谁在什么时候修改的历史信息

git blame <file_name>

git branch

  • 查看所有分支信息:

git branch -a

  • 查看各分支最后一次的提交信息:

git branch -v

  • 查看已经合并的分支:

git branch --merge

  • 查看尚未合并的分支:

git branch --no-merge

  • 新建一个分支:

git branch <branch_name>

  • 删除已被合并的分支(对未合并的分支会导致失败)

git branch -d <branch_name>

  • 重命名分支:

git branch -m <old_branch_name> <new_branch_name>

git checkout

将工作目录的文件变为某个版本或分支的内容(称为"签出"或"检出")

  • 签出某个文件: (跟 git reset 类似, 但会改变工作目录的内容)

git checkout <commit_id> <file_name>
(<commit_id> 为 HEAD 或 – 或留空时, 表示当前版本)
(<commit_id> 最好不要留空, 容易跟切换分支混淆)

  • 更新工作目录的所有文件, 使其和某个特定提交中的文件一致

git checkout <commit_id>

  • 切换到某个分支:

git checkout <branch_name>

git clean

  • 执行一次 git clean 的"预演", 告诉哪些文件会被移除, 但不是真的移除:

    git clean

  • 移除当前目录未被跟踪的文件 (-f 参数时必需的):
    (不会删除 .gitignore 中指定的未跟踪文件)

    git clean -f

  • 移除某个路径下未跟踪的文件:

    git clean -f <path_name>

  • 移除当前目录下未跟踪的文件及目录:

    git clean -df

  • 移除当前目录下未跟踪的文件及 Git 一般忽略的文件:

git clean -xf

git clone

将 repo_url 指向的远程版本库克隆到本地:
(自动把远程仓库命名为 origin)

git clone <repo_url>

git commit

  • 将暂存的文件提交(会要求添加注释)

git commit

  • 将所有已跟踪的文件暂存并提交:

git commit -a

  • 修改上次的提交, 把当前暂存的修改合并到上一次提交:

git commit --amend

  • 直接填写注释 (message)

git commit -m “message”

  • 在注释中添加一行 Signed-off-by 的信息

git commit -s
添加的 Signed-off-by 信息如下:
Signed-off-by: <user_name> <user_email>

git diff

查看文件的区别

  • 比较工作目录和暂存区的文件:

    git diff

  • 比较工作目录和版本库的文件:

git diff HEAD

  • 比较暂存区和版本库的文件:

git diff --cached

git 生成patch

git diff xxx-原有代码 xxx-新代码 > 1.patch

  • 如果代码提交,则

git diff commit-id-原有提交 commit-id-新提交 > 1.patch

  • 如果生成的patch有二进制文件,需要加上–binary

git diff commit-id-原有提交 commit-id-新提交 --binary > 1.patch

  • git format-patch这种生成的补丁,能保存提交补丁的人,log信息等
  • 最新一次提交的更改patch

git format-patch HEAD^

  • 打上补丁

git apply 1.patch

git fetch

将提交从远程仓库导入到本地仓库, 拉取下来的提交存储为远程分支

  • 拉取远程仓库的所有分支:

git fetch <remote_name>

  • 拉取远程仓库的特定分支:

git fetch <remote_name> <branch_name>

  • 可以将远程仓库的特定分支拉取到本地的特定分支

git fetch <remote_name> <remote_branch_name>:<local_branch_name>

git init

创建一个本地的库

git pull

  • 拉取当前分支对应的远程副本的更改, 并立即并入本地副本
    (效果与 git fetch 后接 git merge origin/. 一致)

git pull <remote_name>

  • 可以使用 git rebase 而不是 git merge 合并远程分支和本地分支:

git pull --rebase <remote_name>

  • 如果自己有已经commit的代码,但是gerrit上面没有合并,现在自己想拉取新的代码,则repo sync 这样自己的package仓库会出现偏离,则可以通过git pull --rebase来拉去最新代码,然后将自己的提交添加到最新代码的上面

git push

  • 将本地指定的分支推送到远程仓库上:

git push <remote_name> <branch_name>

  • 若想将指定的本地分支推送到指定的远程分支上, 可用:

git push <remote_name> <local_branch_name>:<remote_branch_name>

  • 该语法的变种可用于删除某个远程分支:

git push <remote_name> :<remote_branch_name>

详情可参考:
[[%E5%88%A0%E9%99%A4%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E6%9F%90%E6%AC%A1%E9%94%99%E8%AF%AF%E6%8F%90%E4%BA%A4][删除远程仓库的某次错误提交]]

  • 若在第一次 push 时使用了 -u 参数, 以后就可以直接使用不带别的参数的 git pull 从之前 push 到的分支来 pull, 如:

git push -u origin master

  • 将本地所有的分支推送到远程仓库上:

git push <remote_name> --all

  • 标签不会被自动推送, 用 --tags 参数可将所有本地标签推送到远程仓库

git push <remote_name> --tags

git log

查看已提交的项目历史信息

  • 使用默认格式显示完整的项目历史:

git log

  • 除了 git log 的信息外还包括哪些文件被修改, 以及其相对的增删行数:

git log --stat

  • 显示每个提交的一堆信息 (这是项目历史中最详细的视图):
  • 如果代码已将git commit,这时想要看改动了代码的哪些地方,git log -p

git log -p <file_name>

  • 搜索特定作者的提交 (pattern 可以是字符串或正则表达式):

git log --author=“pattern”

  • 搜索提交信息匹配特定 pattern 的提交:
    (pattern 可以是字符串或正则表达式)

git log --grep=“pattern”

  • 只显示发生在 since 和 until 之间的提交:
    (这两个参数可以是提交的 ID, 分支名, HEAD 或任何一种引用)

git log since…until

  • 只显示包含特定文件的提交:

git log <file_name>

  • 其他一些有用的选项:
    git log --graph --decorate --oneline
    –graph : 绘制一副字符组成的图形, 左边是提交, 右边是提交信息
    –decorate : 加上提交所在的分支名称和标签
    –oneline : 将每个提交信息压缩到一行

git merge

  • 将特定分支合并到当前分支:

    git merge <branch_name>

git mergetool

  • 使用 merge 工具来解决冲突
    (使用之前需要先配置 merge.tool)

git mv

  • 用于移动或重命名文件

git mv <old_name> <new_name>
以上命令等价于:
mv <old_name> <new_name>
git rm <old_name>
git add <new_name>

git pack

(rebase 会用新的提交替换旧的提交, 因此不要在公共仓库上 rebase)

  • 将当前分支 rebase 到 base_name 上:
    (base_name 可以是任何类型的提交引用(ID, 分支名, 标签或 HEAD 等))

    git rebase <base_name>

  • 中止 rebase:

    git rebase --abort

  • 在解决冲突后继续 rebase

    git rebase --continue

git reflog

  • 显示本地仓库的引用日志:

    git reflog

  • 用相对日期显示引用日志:

    git reflog --relative-date

git remote

  • 列出你和其他仓库之间的远程连接:

    git remote

    加上 -v 参数会同时显示每个连接的 URL

    git remote -v

  • 创建一个新的远程仓库连接:

    git remote add <remote_name> <remote_url>

  • 移除远程连接:

    git remote rm <remote_name>

  • 重命名远程连接:

    git remote rename <old_name> <new_name>

git reset

(相比于 git revert, 它会改变现在的提交历史, 因此应该用在私有分支上, 在公共分支上尽量少用)

  • 版本库恢复到某个特定的 commit
    暂存区内容不保留
    工作目录内容不变

    git reset --mixed <commit_id>
    这是默认选项, 参数 --mixed 可省略:
    git reset <commit_id>
    该操作也可用于取消暂存某个文件:
    git reset HEAD <file_name>

  • 版本库恢复到某个特定的 commit
    暂存区内容保留
    工作目录内容不变:

    git reset --soft <commit_id>

    • 版本库恢复到某个特定的 commit
      暂存区内容不保留
      工作目录变为该 commit 的状态(未被跟踪的文件除外)

    git reset --hard <commit_id>
    以下命令相当于撤销工作目录最近修改的内容:
    git reset --hard HEAD

  • 可对特定的文件进行操作:

    git reset <commit_id> <file_name>

git revert

(相比于 git reset, 它不会改变现在的提交历史, 因此可以用在公共分支上)

创建一个新的提交来撤销某个提交:

git revert <commit_id>
(git revert 不会直接创建一个提交, 需要再执行 commit 命令才会成为真正的提交)

  • 多条log提交,如果想撤销掉中间的某个log,
    commit3
    commit2
    commit1
    如上是git log显示的信息,想撤销commit2的代码

    git revert commit2

git rm

  • 删除工作目录和版本库的文件(不会删除暂存区中的文件)

    git rm <file_name>

  • 删除暂存区和版本库的文件(不会删除工作目录的文件)

    git rm --cached <file_name>

  • 强制删除文件(包括工作目录, 暂存区, 版本库中的)

    git rm -f <file_name>
    (使用通配符时可能会有所受限, 可用 -rf 参数)

git stash

  • 用于保存当前代码的修改状态. 适用于在某个分支上进行修改工作到一半时,
    需要切换到其他分支处理一些紧急事情, 可将当前的工作状态存储起来:
    或者下面的情况:
    • 正在干某件事情,没干完,不想进行一次commit,但是又需要拉取服务器最新的代码,可以使用git stash将正在进行的任务暂存起来

git stash
执行完后工作目录会变得干净, 从而可以随意切换分支

  • git stash 可以执行多次, 通过以下命令可以查看所有 stash 的列表:
  git stash list
  可看到类似如下的信息:
  stash@{0}: ...
  stash@{1}: ...
   .
   .
   .

其中 stash@{0} 为最近一次保存记录

  • 为了方便记忆与辨识, 可以给记录命名:

    git stash save “name”

    再执行 git stash list 可看到类似如下的信息:

  stash@{0}: ...
  stash@{1}: ... : name
   .
   .
   .
  • 还原最近一次保存的记录:

    git stash apply

    也可以指定还原某一次保存的记录, 如:

    git stash apply stash@{1}

    若执行 git stash 时有部分文件已经加入了暂存区, 而有部分文件没有,
    则执行 apply 操作后所有的文件都会变成未暂存的状态,
    若想维持这些文件原本暂存的状态, 可加上 --index 参数:

    git stash apply --index

  • 查看暂存的列表
     >git stash list

  • 显示 stash 的内容具体是什么:

    git stash show

    与 git stash apply 一样可以指定某一次具体的 stash 记录, 如:

    git stash show stash@{1}

  • 执行 apply 操作后 stash 还在 stash 列表中, 若想删除这个 stash, 可用:

    git stash drop

    不加参数的话默认删除最新一条 stash 记录, 可以指定某一条具体记录, 如:

    git stash drop stash@{1}

  • 可用 pop 一次完成 apply 和 drop 的操作:

  • 当完成别的任务后,使用git stash pop将暂存起来的任务恢复,继续做

    git stash pop

  • 存在一种情况, 我们把原来的状态 stash 了, 然后修改其他一些东西并提交了,
    但这些修改的文件有些在之前已经被 stash 了, 执行 apply 时可能会有冲突.
    这种情况可以在已经提交的基础上新建一个分支, 然后再执行 apply 操作.
    这两个步骤可以用一次操作完成:

    git stash branch <branch_name>

暂存某次更改,且添加暂存标题XXX

git stash save “XXX”

git status

查看工作目录中未提交的文件的状态, 文件的状态可能为:

  • Untracked (??)
  • Added (A)
  • Modified (M)
  • Deleted (D)
  • Renamed ®

git tag

  • 为当前提交打标签:

    git tag <tag_name>

  • 为某个特定的提交打标签:

    git tag <tag_name> <commit_id>

  • 列出现有标签: (按字母排序)

    git tag

    (可另外使用 git show <tag_name> 查看标签的信息)

  • 删除标签:

    git tag -d <tag_name>

git rebase

如果git commit提交了多次代码,修改好多次提交的log信息
3.commit 0ee44efbb5bee04abc8116066764b1bdb9fac272  第三笔提交
2.commit 42fefcc6d87adedc50bfbe8b82faae81c520a1aa  第二笔提交
1.commit 4ef7d61c01f5c2e4ec550cda60e571882ab7cd91  第一笔提交

上面为最新提交

  • 修改好多次提交的log信息

git rebase -i

修改上面提交前两次的log信息,执行git rebase -i 42fefcc6d87ade 会出现一个vim 编辑框,进入vim将pack改为r 并修改log信息,然后保存会自动跳转到第二个要修改的log信息的vim中。第一个vim修改的是第二笔提交,第二个vim 修改的是第三笔提交

  • 通常在gerrit中把提交abandon,那么重新提交需要修改提交的id,才能重新推到gerrit上

  • 如果现在最新提交一次代码是对第二笔提交的修改,只有将第二笔提交和第一笔提交换下位置,然后git commit --amend将最新的改动提交到原本第二笔提交上面。

  • 撤销某次变基

git rebase --abort

git rebase -i执行错误导致处于正在变基中,若要撤销此次操作,git rebase --abort

Git commit 注释推荐规范

  • 第一行为对改动的简要总结, 建议长度不超过 50, 用语采用命令式而非过去式
  • 第二行为空行 (若配置了自动发邮件, 则第二行作为分隔线, 区分上下两部分)
  • 第三行是对改动的详细介绍, 可以是多行内容, 建议每行长度不超过 72
    (为的是 git log 输出的时候显示比较好看)

** Gitflow
[[file:…/.pictures/git-flow-commands-without-flow.png][git-flow-commands-without-flow.png]]

某些特殊的 Git 操作

删除远程仓库的某次错误提交

<<删除远程仓库的某次错误提交>>
参考:

http://zhiwei.li/text/2015/08/16/git%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E6%9F%90%E6%AC%A1%E9%94%99%E8%AF%AF%E6%8F%90%E4%BA%A4/

(此处以远程仓库的 master 分支为例)

  • 若远程仓库能通过 SSH 访问, 则跟本地操作没什么区别,
    使用 git reset 相关命令即可

  • 若远程仓库不能通过 SSH 访问, 则按照以下步骤操作:

    1. 在本地新建 old_master 分支作为备份, 以防万一

      git branch old_master

    2. 将本地的 old_master 分支推送到远程的 old_master

      git push origin old_master:old_master

    3. 在本地使用 git reset 的相关命令回退到某个特定的版本
    4. 删除远程的 master 分支
      (如果是 Github 或 Bitbucket 等, 需要先把默认分支 (或叫做主要分支)
      改为 old_master, 因为若默认分支为 master, 是不能删除的)

      git push origin :master

    5. 重新创建远程 master 分支

      git push origin master:master

    6. 最后可以将默认分支改回为 master, 并删除本地和远程的 old_master 分支

Repo

Ropo 可实现管理多个 Git 仓库

Repo 命令

参考链接:

- http://blog.csdn.net/stevenhu_223/article/details/8828130
- http://www.cnblogs.com/angeldevil/p/3238470.html
- https://source.android.com/source/using-repo?hl=zh-cn#top_of_page
  • 可以使用 repo 内部的帮助来查阅命令的用法:

repo help

如:

repo help init

注意:
对于除 init 外的所有 repo 命令,
当前目录必须是 .repo 的父目录或对应父目录的子目录

repo abandon
  • 删除一个分支, 无论是否已经 merge
    (实际上是对 git branch -D <branch_name> 的封装)

repo abandon <branch_name> […]

repo branch
  • 查看分支

repo branch [<project_name>…]

repo diff
  • 查看在 commit 与 working tree 之间的文件差异
    repo diff [<project_name>…]
repo init

repo init -u [OPTIONS]

在当前目录下初始化 repo, 在当前目录下生成一个 .repo 目录

  • -u 参数指定远程库的 URL
  • 可以加上 -m 参数指定 manifest 文件, 默认为 default.xml,
    在 .repo/manifest 里保存 manifest 文件.
    repo 是一系列 git project 的集合, 在 .repo/projects 下有所有
    git project 的数据信息, 每个 git project 下 .git 目录中的
    refs 等目录都链接到 .repo/manifest 下.
  • 可以加上 -b 参数指定某一个分支
    例子:
    repo init -u http://gerrit.allwinnertech.com:8081/product/tina/manifest.git -b tina-dev -m default.xml
repo manifest
  • 显示 manifest.xml 文件的内容

repo manifest

repo prune
  • 删除已经 merge 的分支

repo prune [<project_name>…]

repo start

repo start <branch_name> [-all | <project_name>…]

从远程库同步下来的新git仓库是没有分支的,git branch -vvv 查看分支情况,显示该仓库(非分支)将新git 仓库对应的本地仓库名称为name-dev

repo start name-dev 新git仓库

.repo/manifests/default.xml文件里面保存所有仓库是通过哪个远程仓库拉下来的,并且提交代码到哪个远程仓库,以及本地仓库名称对应的远程哪个仓库名称,如果新添加一个仓库,可以更改这个文件,但是新添加的仓库需要给这个仓库对应一个本地仓库的名称,否则repo forall -p -c git branch -vvv这样会显示新添加的仓库(非分支)

刚克隆下来的代码是没有分支的, repo start 实际是对 git checkout -b
命令的封装, 为指定的项目或所有项目 (若使用 --all 参数),
以 manifest 文件中设定的分支为基础, 创建特性分支.
区别于在当前分支基础上创建分支的 git checkout -b,
repo start 是在 manifest 文件设定分支的基础上创建特性分支
例子:

repo start tina-dev --all

repo status
  • 查看本地所有或指定某些 project 的修改, 每个修改的文件前有两个字符.
    repo status [<project_name>…]
  • 第一个字符表示暂存区的状态:
LetterMeaningDescription
-no changedsame in HEAD and index
Aaddednot in HEAD, in index
Mmodifiedin HEAD, modified in index
Ddeletedin HEAD, not in index
Rrenamednot in HEAD, path changd in index
Ccopiednot in HEAD, copied from another in index
Tmode changedsame content in HEAD and index, mode changed
Uunmergedconflict between HEAD and index, resolution required
  • 第二个字符表示工作区的状态:
    LetterMeaningDescription
    -new/unknownnot in index, in work tree
    mmodifiedin index, in work tree, modified
    ddeletedin index, not in work tree
repo sync
  • 参照 manifest 文件 .repo/manifest.xml 克隆并同步版本库.

repo sync [<project_name>…]

repo upload
  • 将版本库推送到 Gerrit 代码审核服务器

repo upload [–re --cc] [<project_name>…]

如果repo upload提交两个仓库的内容,那么分别在各自的仓库中进行git commit后,repo upload,然后出现一个vim编辑框,此时将要提交的不同仓库解注释,即可实现多仓库提交

选项如下:

- -t : 发送本地分支名到 Gerrit 代码审核服务器
- --re=REVIEWERS, --reviewers=REVIEWERS : 请求指定人员进行审核
- --cc=CC : 同时给指定的邮件地址发送邮件
- --br=BRANCH : 指定 upload 的分支
- --cbr, --current-branch : upload 当前的分支
- -d, --draft : 作为一个 draft 进行 upload
- -D BRANCH, --destination=BRANCH, --dest=BRANCH :
  为指定的这个分支提交 review
- --no-verify : 不要运行 upload hook
- --verify : 运行 upload hook 而不提示
  • 删除本地分支

git branch -D Su-modify

  • 删除a目录下的2.txt文件 删除a目录git rm -r --cached a

git rm -r --cached a/2.txt

repo forall
  • 切换所有git仓库分支

repo forall -c git checkout tina-v2.5.0

  • 创建并切换所有git仓库分支

repo forall -c git checkout -b tina-v3.0.6 tina-v3.0.6

  • 清空所有分支的修改

repo forall -c git checkout .

  • 查看所有仓库的远程分支名称

repo forall -p -c git branch -vvv

  • 当提交的代码在远程分支没有合并之前,在本地git status时,提示跟远程分支偏离,
    因此,如果此时git reset 到一个版本,然后git pull拉取最新代码,然后git status出现没有跟踪当前提交的文件。出现这样的情况,可以在gerrit中找到自己以前提交的changed ID然后git add ,git commit -s 将这个id粘贴到上面,最后再repo upload即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值