https://git-scm.com/book/en/v2/Git-Basics-Tagging
https://git-scm.com/docs/git-tag
git tag 为特定的提交commit添加标签tag【额外标记 指示有用信息】
git tag v1 SHA123
git tag # 列出所有标签
git tag -a v1.0
标签创建者
标签创建日期
标签消息
git show v1.2 #之后可以向引用SHA那样去看标签对应的commit情况
git tag -d v1.0
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样。“push”翻译为“推送”。git push-05
git push origin
git push origin --tags
https://learngitbranching.js.org
git branch # 列出本地仓库中的所有分支名称, 活跃分支名称旁边会显示一个星号*
git branch -a # 列出所有远程分支。
git branch master^^2
git branch alt-sidebar-loc 42a69f # 创建了一个叫做 alt-sidebar-loc 的新分支,并使其指向 SHA 为 42a69f 的 commit。
git checkout HEAD~4
git branch -f master HEAD~3 # 将【master 分支】强制指向 HEAD 的第 3 级父【commit****】
# -f 则容许我们将分支强制移动到那个位置。
git checkout -b
git branch -m # 将当前分支重命名为。
git branch -d
# -d 选项,告诉 git 删掉给出的分支<例如sidebar> 。
# 注意,无法删除当前所在的分支
git branch -D sidebar
#某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支
#强制删除,你需要使用大写的 D 选项
git merge [newfix] # 将newfix分支上的最后commit合并至现(主)分支
合并冲突指示符解释(编辑器具有以下合并冲突指示符):
<<<<<<< HEAD 此行下方的所有内容(直到下个指示符)显示了当前分支上的行
||||||| merged common ancestors 此行下方的所有内容(直到下个指示符)显示了原始行的内容
======= 表示原始行内容的结束位置,之后的所有行(直到下个指示符)是被合并的当前分支上的行的内容
>>>>>>>heading-update 是要被合并的分支(此例中是 heading-update 分支)上的行结束指示符
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 重新开始。