簡體   English   中英

Git pull vs Git Rebase 頭部版本

[英]Git pull vs Git Rebase head version

通常這是我如何推送我的代碼以進行合並以掌握

方法一:

git pull origin master
git add -A
git commit -m 'message'
git push

后來發現 pull 不是擁有線性歷史的正確方法,我應該 rebase 然后 push

我目前在做什么

方法二:

git checkout LocalBranch
git rebase master[resolve conflicts]
git add -A
git commit -m 'message'
git push

問題:

當我使用方法 1 做事情時,它說 master 已經是最新的如果我使用方法 2,它會引發很多沖突,並且在解決之后我無法推送代碼。

題:

  1. 為什么git pull master(5abc)git rebase master(4def)指向 master 的不同頭部版本。
  2. git pullgit rebase不會隨時獲得相同版本的 master 嗎?

我認為您需要清楚git pull的工作。 從遠程拉取,代碼的位置(可以是 GitHub、GitLab、BitBucket 等)導致 git 到git fetchgit merge 那是什么意思?

這意味着它首先獲取您的代碼和遙控器代碼之間的差異(例如,假設遙控器上有兩個“額外”提交),然后嘗試這些差異合並到您的代碼庫中。 現在,如果這 2 個提交與您在代碼上所做的提交無關(例如創建新文件),這可以順利進行。 但是,如果代碼的同一部分發生更改,假設您的代碼是:

int a = 4;
bool x = false;

但合並想要做到這一點:

int a = 5;
bool x = false;

這會造成合並沖突,因為您的代碼說a是 4 但合並說是 5,git 應該考慮哪個? 因此,您在提取代碼時會收到merge conflict的提示。 您需要手動解決它們才能使事情正常進行。

git rebase master可幫助您將LocalBranch的提交重新應用到 master 上。 這意味着它需要您的工作樹並嘗試將其與主工作樹融合。 對這個過程進行詳細的分析。 變基意味着無論做了什么提交,所有這些都將應用在 master 之上(或者如果你想要,甚至可能介於兩者之間 ;) )。 請觀看視頻以獲得更好的主意。 由於這個過程是一個循序漸進的過程,它會將您帶到不同的提交(首先要重新定位的提交)。

git pull (特別是merge步驟)將采用“差異”提交並嘗試mergemerge到您的主工作樹中。 只有在此過程完成后,您才能進行addcommit並最終push

另外,我想提供一個提示,使用交互式變基,git rebase -i來進行變基,因為它為您提供了一個交互式界面來幫助您變基。

如果還有更多困惑,請隨時發表評論! :)

最好的事物

PS:您可以在rebase情況下進行強制推送,以便能夠將更改推送到遙控器上。

方法 1 具有線性歷史的正確替代方法是:

git add -A
git commit -m message
git fetch origin
git rebase origin/master [resolve conflicts]
git push 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM