git rebase --onto分支之后的〜是什么意思?

时间:2019-05-22 04:58:33

标签: git rebase git-rewrite-history

在Git文档为class BottomSheetFragment : BottomSheetDialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_bottomsheetfragment_list_dialog, container, false) val data = arguments?.getString("key") // Log.d("===",data+"") return view } } 提供的示例中,不清楚〜的含义

  

也可以使用rebase删除一系列提交。如果我们有以下情况:

     

git rebase --onto

     

然后输入命令

     

enter code here E---F---G---H---I---J topicA

     

将导致删除提交F和G:

     

git rebase --onto topicA~5 topicA~3 topicA

     

如果F和G以某种方式存在缺陷,或者不应该成为topicA的一部分,则这很有用。请注意,-onto的参数和参数可以是任何有效的commit-ish。

E---H'---I'---J' topicA意味着从topicA~5的头开始有5次提交吗? (那么倒数了吗?)

我想不出这意味着什么,但我想确定在尝试回购之前。

2 个答案:

答案 0 :(得分:2)

这是来自git rev-parse

<rev>~<n>, e.g. master~3
     

修订版参数的后缀~<n>表示提交对象,它是指定提交对象的第<n>代祖先,仅跟随第一个父对象。
  即<rev>~3等效于<rev>^^^,等效于<rev>^1^1^1

因此,在您的情况下,是的,topicA~5表示从topicA的头开始进行5次提交:提交E

答案 1 :(得分:0)

~表示提交的父对象,因此hash~5hash的祖父或祖父母。

从图形上可以看出(输出类似于git log --graph --oneline,最旧的提交在底部):

* ggggg - (HEAD)
* fffff
* eeeee
* ddddd
* ccccc
* bbbbb
* aaaaa

然后:

ggggg~5 == bbbbb

在此回复中,我对~^作了更深入的解释:Git what is the logical difference between parent and ancestor