03-git tag标签;git push--tags; git branch分支; git merge,git rebase整合分支提交

git标签、分支、整合提交

  • 标签
    • git tag
      • 添加标签 -a
      • 删除标签 -d
    • 共享标签 git push
  • 分支
    • git branch
      • 列出分支, -a:
      • 创建新的分支<>:
      • 强制修改分支位置 -f:
      • 创建一个新的分支同时切换到新创建的分支:checkout -b
      • 分支重命名 -m:
      • 删除分支-d,-D:
  • 整合提交
    • git merge
    • git rebase 使历史纪录更加线性

标签

https://git-scm.com/book/en/v2/Git-Basics-Tagging
https://git-scm.com/docs/git-tag

git tag

git tag 为特定的提交commit添加标签tag【额外标记 指示有用信息】

git tag v1 SHA123
  • 将这个【标签命名为 v1】,并且明确地让它指向【提交记录 SHA123】,如果你不指定提交记录,Git 会用 HEAD 所指向的位置。
  • git tag # 列出所有标签
    

添加标签 -a

git tag -a v1.0 
  • 如果没有SHA那将默认为最近的 commit 添加标签
  • -a 选项: 告诉 git 创建一个带注释的标签。如果你没有提供该选项(即 git tag v1.0),那么它将创建一个轻量级标签(不带注释)。
  • 建议使用带注释的标签,因为它们包含了大量的额外信息,例如:

    标签创建者
    标签创建日期
    标签消息

  • git show v1.2 #之后可以向引用SHA那样去看标签对应的commit情况
    

删除标签 -d

 git tag -d v1.0
  • -d 选项 (表示 delete 删除!)【要删除的git 标签名称(例如想要要输入 v0.1,而要删除原来打错的 v1.0)】

共享标签 git push

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样。“push”翻译为“推送”。git push-05

git push origin 
git push origin --tags
  • 如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。
  • 使用 git push --tags 推送标签并不会区分轻量标签和附注标签, 没有简单的选项能够让你只选择推送一种标签。

分支

https://learngitbranching.js.org

git branch

列出分支, -a:

git branch  # 列出本地仓库中的所有分支名称, 活跃分支名称旁边会显示一个星号*
git branch -a # 列出所有远程分支。

创建新的分支<>:

git branch  master^^2 
git branch alt-sidebar-loc 42a69f # 创建了一个叫做 alt-sidebar-loc 的新分支,并使其指向 SHA 为 42a69f 的 commit。

强制修改分支位置 -f:

git checkout HEAD~4 

git branch -f master HEAD~3 # 将【master 分支】强制指向 HEAD 的第 3 级父【commit****】
# -f 则容许我们将分支强制移动到那个位置。

创建一个新的分支同时切换到新创建的分支:checkout -b

git checkout -b 

分支重命名 -m:

git branch -m  # 将当前分支重命名为

删除分支-d,-D:

git branch -d   
# -d 选项,告诉 git 删掉给出的分支<例如sidebar> 。
# 注意,无法删除当前所在的分支

git branch -D sidebar
#某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支
#强制删除,你需要使用大写的 D 选项 

整合提交

git merge

git merge [newfix] # 将newfix分支上的最后commit合并至现(主)分支

合并冲突指示符解释(编辑器具有以下合并冲突指示符):

<<<<<<< HEAD 此行下方的所有内容(直到下个指示符)显示了当前分支上的行
||||||| merged common ancestors 此行下方的所有内容(直到下个指示符)显示了原始行的内容
======= 表示原始行内容的结束位置,之后的所有行(直到下个指示符)是被合并的当前分支上的行的内容
>>>>>>>heading-update 是要被合并的分支(此例中是 heading-update 分支)上的行结束指示符

git rebase 使历史纪录更加线性

https://git-scm.com/book/en/v2/Git-Branching-Rebasing
https://git-scm.com/docs/git-rebase
https://www.atlassian.com/git/tutorials/rewriting-history#git-rebase

git rebase来进行压制(squash):将多个commit合并成一个commit。将 commit 移动到一个新基底(base)上。
建议使用rebase前先创建一个备份(backup)分支,这样便能很容易返回到之前的状态。如果你对变基的结果满意,则可以删除 backup 分支!

git rebase [主分支master] # 次分支拉至主分支下

git cherry-pick <提交号>...  # 非常灵活的~~
# *master当前分支下拉取side分支的提交记录 Commit2 和 Commit4 提交记录的SHA

交互式rebase:在 commit 的交互式列表中,所有 commit 都以 pick 开头,但你可以使用其他命令(reword、edit、squash、fixup、exec 和 drop)进行变换。

git rebase -i HEAD~4 #使用 HEAD~4 作为其他所有 commit (HEAD~3、HEAD~2、HEAD~1 和 HEAD)将连接到的基底,没有分支指向原来的commit(HEAD~3、HEAD~2、HEAD~1 和 HEAD)将被完全清除
# -i 代表"交互式",调整顺序、删除、合并提交
# HEAD~4 将是你当前所在的 commit 向前4个的 commit。

1-弹出来了 rebase可执行的命令|SHA|commit_message:时间顺序从上往下, 最上方是距离现在最久远的开始

# p, pick = use commit 使 commit 保持原样
# r, reword = use commit, but edit the commit message 保留commit但将重新编写提交说明
#e, edit = use commit, but stop for amending
保留 commit 的内容,但先不要执行 commit,以便:
-添加新内容或文件
-删除内容或文件
-修改即将 commit 的内容
# s, squash = use commit, but meld into previous commit 使用commit但合并到前一个commit中,第一个就没有再前面了就不能用【s】,保持第一行为【pick】:将下方的s压缩结合到上一行commit直到第一行pick使用第一行的提交说明
#f, fixup = like “squash”, but discard this commit’s log message将此 commit 的更改结合到前一个 commit 中,但删除提交说明
#x, exec = run command (the rest of the line) using shell运行 shell 命令
#b, break = stop here (continue rebase later with ‘git rebase --continue’)
#d, drop = remove commit删除 commit
#l, label

保存文件并退出编辑器再继续进行rebase(变基):
2-重写提交说明,保存文件后退出编辑器
3-将分步骤的提交说明删掉只留刚刚2-提交说明,将#不会出现在提交说明的注释行删掉上面几行,保存文件后退出编辑器,完成rebase


git rebase 命令非常强大。它可以帮助你编辑提交说明、重新排序 commit、合并 commit 等,真的是一款非常强大的工具。现在的问题是"应该何时进行变基?"。
每当你对 commit 进行变基,Git 将为每个 commit 创建一个新的 SHA!这有很大的影响。对于 Git,SHA 为 commit 的标识符,因此不同的标识符代表着不同的 commit,无论内容是否发生了变化。

如果你已推送了你想进行变基的 commit,则不应变基。如果你在与其他开发者协作,那么他们可能已经在使用你推送的 commit; 如果你随后使用 git rebase 来进行更改,并强行推送 commit,则其他开发者现在将无法与远程仓库同步。他们需要对自己的 Git 仓库进行一些复杂的操作,使它们的仓库回到工作状态……甚至可能连这一点都做不了;他们可能得抛弃之前的所有工作,使用你新变基过且强制推送的 commit 重新开始。

你可能感兴趣的:(版本控制,git)