亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Git中壓縮前兩個提交?

在Git中壓縮前兩個提交?

Git
汪汪一只貓 2019-12-07 13:48:48
使用,git rebase --interactive <commit>您可以將任意數量的提交壓縮在一起。除非您想將提交壓縮到初始提交中,否則一切都很好。這似乎是不可能的。有什么方法可以實現?中度相關:在一個相關的問題中,我設法提出一種不同的方法來解決第一次提交時的壓榨問題,
查看完整描述

3 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

現在,您可以將所有提交重新設置為根,然后選擇第二個提交Y與第一個壓縮X。


git rebase -i --root master


pick sha1 X

squash sha1 Y

pick sha1 Z

git rebase [-i] --root $tip

現在可以使用此命令重寫從“ $tip”到根提交的所有歷史記錄。


見提交df5df20c1308f936ea542c86df1e9c6974168472在GitHub上從克里斯·韋伯(arachsys)。


我相信您會在SO問題“ 如何合并git存儲庫的前兩次提交? ”中找到不同的配方。


查爾斯·貝利(Charles Bailey)在此處提供了最詳細的答案,提醒我們一次提交就是一棵完整的樹(不僅僅是與先前狀態的差異)。

在這里,舊的提交(“初始提交”)和新的提交(壓縮結果)將沒有共同的祖先。

這意味著您不能commit --amend將初始提交變成新的提交,然后將先前的初始提交的歷史記錄(新的沖突)基于新的初始提交。


(最后一句話對不再適用git rebase -i --root <aBranch>)


而是(使用A原始的“初始提交”,而B隨后的提交需要壓縮為初始提交):


返回我們要形成初始提交的最后一個提交(分離HEAD):


git checkout <sha1_for_B>

將分支指針重置為初始提交,但完整保留索引和工作樹:


git reset --soft <sha1_for_A>

使用'B'中的樹來修改初始樹:


git commit --amend

臨時標記此新的初始提交(或者您可以手動記住新的提交sha1):


git tag tmp

返回原始分支(此示例為master):


git checkout master

將B之后的所有提交重播到新的初始提交上:


git rebase --onto tmp <sha1_for_B>

刪除臨時標簽:


git tag -d tmp

這樣,“ rebase --onto”不會在合并過程中引入沖突,因為它會將最后一次提交()之后要壓縮的歷史重新建立B到最初的提交(A)中tmp(代表被壓縮的新的初始提交):瑣碎的快進僅合并。


既適用于“ A-B”,也適用于“ ” A-...-...-...-B(可以將任意數量的提交壓縮為初始提交)


查看完整回答
反對 回復 2019-12-07
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

我對VonC的腳本進行了重新設計,使其可以自動完成所有操作,而不要求我做任何事情。您給它兩個提交SHA1,它將把它們之間的所有內容壓縮到一個名為“壓縮歷史”的提交中:


#!/bin/sh

# Go back to the last commit that we want

# to form the initial commit (detach HEAD)

git checkout $2


# reset the branch pointer to the initial commit (= $1),

# but leaving the index and working tree intact.

git reset --soft $1


# amend the initial tree using the tree from $2

git commit --amend -m "squashed history"


# remember the new commit sha1

TARGET=`git rev-list HEAD --max-count=1`


# go back to the original branch (assume master for this example)

git checkout master


# Replay all the commits after $2 onto the new initial commit

git rebase --onto $TARGET $2


查看完整回答
反對 回復 2019-12-07
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

如果您只是想將所有提交壓縮到一個初始提交中,只需重置存儲庫并修改第一個提交即可:


git reset hash-of-first-commit

git add -A

git commit --amend

Git重置將使工作樹保持完整,因此一切仍然存在。因此,只需使用git add命令添加文件,然后使用這些更改來修改第一次提交。與rebase -i相比,您將失去合并git注釋的能力。


查看完整回答
反對 回復 2019-12-07
  • 3 回答
  • 0 關注
  • 621 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號