git---主分支同步到子分支
在进行git项目协同开发的时候,每个分支的代码会被合并到主分支 master 分支上,但是如何将master分支上的代码合并到子分支上呢?
1. 先切换到主分支
git checkout master
2. 把领先的主分支代码pull下来
git pull
3. 切换到自己的分支
git checkout xxx(自己的分支)
4. 把主分支的代码merge到自己的分支
git merge master
5. git push推上去完成
git push origin 自己分支名
GIT删除指定的某次版本提交
- 查看版本列表
- 执行删除版本命令
- 在弹出的文档中,标记要删除的版本
- 退出文档编辑状态,会立即执行删除
git describe
由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来描述离你最近的锚点(也就是标签),它就是
git describeGit Describe 能帮你在提交历史中移动了多次以后找到方向;当你用
git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。
git describe的语法是:git describe <ref>
<ref>可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(HEAD)。它输出的结果是这样的:
<tag>_<numCommits>_g<hash>
tag表示的是离ref最近的标签,numCommits是表示这个ref与tag相差有多少个提交记录,hash表示的是你所给定的ref所表示的提交记录哈希值的前几位。当
ref提交记录上有某个标签时,则只输出标签名称
git tags
相信通过前面课程的学习你已经发现了:分支很容易被人为移动,并且当有新的提交时,它也会移动。分支很容易被改变,大部分分支还只是临时的,并且还一直在变。
你可能会问了:有没有什么可以永远指向某个提交记录的标识呢,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,有没有比分支更好的可以永远指向这些提交的方法呢?
当然有了!Git 的 tag 就是干这个用的啊,它们可以(在某种程度上 —— 因为标签可以被删除后重新在另外一个位置创建同名的标签)永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。
更难得的是,它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
git tag v1 commitID1
# 如果你不指定提交记录,Git 会用 HEAD 所指向的位置。
git tag v1 # == git tag v1 HEAD
$ git tag
v1.0
v2.0
#在 Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list)
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
$ git tag -a v1.2 9fceb02
$ git tag -a v1.4 -m "my version 1.4" #-m 选项指定了一条将会存储在标签中的信息。
# 删除标签
$ git tag -d v1.4-lw
# 显示标签具体信息
$ git show v1.2
# 显示所有标签
git tag
提交的技巧
要在心里牢记 cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。
接下来这种情况也是很常见的:你之前在
newImage分支上进行了一次提交,然后又基于它创建了caption分支,然后又提交了一次。此时你想对某个以前的提交记录进行一些小小的调整。比如设计师想修改一下
newImage中图片的分辨率,尽管那个提交记录并不是最新的了。本关不允许使用 git rebase
git checkout main
git cherry-pick newImage # main后接newImage
git commit --amend # 产生新的提交分支(修改newImage)
git cherry-pick caption # 将caption接到改后的newImage上