你正在絆倒一堆輕微的刺激,我用git,所有在同一時間。這實際上是一個好兆頭。 :-)
首先,rebase有「重新綁定」根提交的問題。在合理的現代版本中,你可以使用git rebase -i --root
來做到這一點,它可以讓你壓縮或修復第二次提交到第一次(根)提交。你需要這個--root
參數。 (GIT的老版本沒有--root
,使這實質上更困難。)
下一頁:
有什麼不同取南瓜
在一個互動變基之間,pick
的意思是「取提交原樣「,並且squash
的意思是」在上一次提交之前添加此提交「。 squash
和fixup
之間沒有本質區別,只是前者給你一個編輯提交消息的機會,而後者只是將「fixup」作爲樹更改(完全拋棄提交消息文本)。
的區別是什麼提交和分支
一個提交是在倉庫裏的一個實際的對象之間。 「分支」是一個不明確的術語,它有時候意味着「分支標籤」 - 它只是對提交的引用,或者等同於對單個提交的名稱 - 有時意味着數據結構由以下形式組成:承諾與他們的親子關係。
有人說是「混帳更有意義,當你理解X」,爲X許多不同的值。這個概括爲「一旦你理解git,git變得更有意義。」 :-)實際上,這不僅僅是重複意義上的事實,而且在幫助你達到目標方面沒有多大的幫助!幸運的是this web series是非常有用的(在我看來)。通讀這一切,「分支」模糊的方式,但通常很明顯,某人意味着什麼,可能會更有意義。
編輯:例如會話:
$ cd /tmp/trepo
$ git init
Initialized empty Git repository in /tmp/trepo/.git/
$ echo data > somefile; git add somefile; git commit -m 'first check in'
[master (root-commit) 64a2d9f] first check in
1 file changed, 1 insertion(+)
create mode 100644 somefile
$ echo other > another-file; git add another-file
$ git commit -m 'combine with first check in'
[master d375b81] combine with first check in
1 file changed, 1 insertion(+)
create mode 100644 another-file
$ git rebase -i --root
[in editor, change second line from "pick" to "fixup"; write and quit]
".git/rebase-merge/git-rebase-todo" 20L, 667C written
[detached HEAD 5b2a979] first check in
2 files changed, 2 insertions(+)
create mode 100644 another-file
create mode 100644 somefile
Successfully rebased and updated refs/heads/master.
$ git log --oneline
5b2a979 first check in
注意另一個小混帳刺激:git log
顯示在新對舊秩序的承諾,但git rebase -i
顯示他們在新的舊到新秩序。
而且:如果你有push
ed,那麼遙控器有舊的提交,而不是新的提交。所以你會看到兩個舊的,可以通過origin/master
(假設遙控器命名爲origin
,你使用的是通常的設置)和(單個)新的,可以通過master
到達。您必須通過git push -f
(具有其所有後果...)才能使遠程回購採取新的master
。
這是我收到的最好的答案之一!我在Git中看到的一個嚴重問題是,您必須降低您對該工具支持的期望。像我想要做的事情應該是簡單的,但也有例外。你會把你的頭撞在牆上幾個小時,直到你發現它不支持你想要做的事。我認爲這是一個巨大的失敗,因爲它的複雜性隱藏了它的可用性,錯誤和缺乏功能。 –
@ user148298:Git可以(我發現)實際上完成了大部分人想要的事情;只是它的界面幾乎是以各種方式積極地「初學者 - 敵對」。例如,基礎設施問題的出現是因爲在其核心上,「基礎設施」確實希望將新的提交*放在某個東西上,所以它不會讓你「重新定位」一個不「任何東西」的根提交,因此不會讓你擠壓第二次提交,這被視爲第一次提交。現在已經通過'--root'結尾了,但是不應該真的需要*'--root'。 – torek
從技術意義上講,它非常有意義,但從用例來看,它令人難以置信地不知所措。談論漏洞抽象! 我在同一個盒子上運行TortoiseGit,Git Gui,VS Git Plugin,Windows Cmd Git Shell,Bash Shell和PowerShell。爲什麼?所以如果我不能找到如何做到這一點,我可以嘗試在其他人上做。 「初學者」是一個誤稱,因爲它隱藏了一些人從未走出初級階段的事實。它應該被稱爲「被濫用的用戶」。現在,我試圖找出爲什麼Git不添加我的空資產文件夾,所有路徑都導致我缺乏對此的支持。 –