簡體   English   中英

git:重置分支吞噬主分支

[英]git: reset branch swallow up master branch

我的 git 歷史記錄出錯了。 當我使用以下一些命令時,其中一個分支會竊取主分支提交:

$ git clone [repo_url]
$ git checkout [branch_A_name]  -- This branch has a commit
$ git reset --soft [revision_hash]   -- same as HEAD~1
$ git add [some_files]
$ git commit
$ git push -f

在此之后,我發現一些我已經合並到 master 分支的提交被branch_A竊取了,這是我之前強制推送的。 這些差異已從master中刪除。

其實,這不是我的。 我的隊友就是這種情況,我聽說他們沒有使用git rebase
他們只是做了reset - commit - force push ,他們在他們的拉取請求頁面中看到了一個混亂的樹。

我們使用 bitbucket。 謝謝你。

據我所知,你的隊友可能做了

git reset  --<probably hard> master
<made changes>
git add <changes>
git commit -m <“message”>
git push -f <whatever> 

盡管此過程在某些情況下有效,但在其他情況下無效。 我猜你的隊友通過不在主服務器上執行git pull或通過執行git remote -v update以在推送前獲取最新更改而讓他們的分支過時。 然后他做了一個git reset --<whatever>來更新並強制推送分支。 這意味着他們推送的提交歷史與 master 的不同之處不僅僅是他們想要更改的提交,而且其他提交可能會出現在那里。

為了解決這種情況,他們需要

git checkout master
git pull
git checkout feature branch
git rebase <master or origin/master>
git log 
<check if commits are correct in the log>
git diff --name-only origin/master
<check if only his commit appears>
git push -f origin <branch name> 

此外,如果您在 Atlassian 上使用 Forks,則可能會出現另一種情況 - 他們的 fork 是不同步的。 盡管 Atlassian 分叉通常設置為自動同步,但git push -f沒有指定分支名稱可能 go 流氓在過時的本地存儲庫和分叉之間。 確保他們的 master 上的提交歷史與主 repo 上的相同,並且他們取消選中並重新選中設置中的“自動同步”按鈕。 確保它說它是最近一次同步的。 從那里他們需要更新他們的本地和所有好東西。

暫無
暫無

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

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