簡體   English   中英

git 在從 master 分支后為新分支帶來一些“舊”更改

[英]git bring some "older" changes to a new branch after branching from master

今天git做了一件我看不懂的事,而且時不時發生在我身上,我可以忍受這個疑惑。

我昨天在從 master 分叉的一個分支上工作。 在那個分支上,我提交的第一個更改是重命名一些文件。 然后我做了一些更多的提交,今天我做了一些我沒有提交的更改。 相反,我決定將這些更改移動到一個新分支,所以我從 master 簽出而不從當前分支移出,也沒有使用這個命令提交這些文件

git checkout -b fix/new-branch --no-track master

然后,一旦在那個分支上,我提交、推送並打開了一個 MR 到 master。 令我驚訝的是,另一個分支上的第一次提交就在那里。 我不明白如何或為什么。 如果更容易理解,這是一個事件列表:

  1. 我在master上,所以我檢查了A
  2. 我做了我的第一次提交(重命名文件)讓我們稱之為 commit_1_A
  3. 更多提交,commit_2_A 和 commit_3_A
  4. 做了一些更改,但不要提交它們
  5. 從 master 結帳到一個新分支而不首先移動到 master: git checkout -b fix/B --no-track master
  6. 然后提交,commit_1_B
  7. 推分店開個MR
  8. commit_1_A 和 commit_1_B 在 MR 上,但不在 commit_2_A 或 commit_3_A 上

根據您的時間線,本地存儲庫的圖表如下所示:

* cea17b6 (HEAD -> fix/B, origin/fix/B) commit_1_B
| * 9fb360f (fix/A) commit_3_A
| * e302cca commit_2_A
| * e2852f4 commit_1_A
|/  
* 7dff81e (origin/master, master) Initial commit

我們看到,對於fix/B -> master ,只有commit_1_B應該在 MR 中。 我看到的最直接的解釋是commit_1_A實際上(意外地)提交給 master ,因此存在於分支fix/B中。

由於您在創建 MR 之前沒有提到master分支的推送,因此它將導致commit_1_Acommit_1_B都包含在差異中(正如您所提到的)。 您的案例中的實際圖表如下所示:

* 2fde583 (fix/A) commit_3_A
* b0b940a commit_2_A
| * 5821436 (HEAD -> fix/B, origin/fix/B) commit_1_B
|/  
* 1a4d1f5 (master) commit_1_A
* a10f2da (origin/master) Initial commit

這些命令的結果(測試用例):

git init local-repo
git init --bare remote-repo
cd local-repo
touch file.txt
git add -A
git commit -m "Initial commit"
git remote add origin ../remote-repo
git push --set-upstream origin master
# assumed branching of fix/A
mv file.txt file2.txt
git add -A
git commit -m "commit_1_A"
git checkout -b fix/A          # actual branching of fix/A
touch file3.txt
git add -A
git commit -m "commit_2_A"
echo "test" > file3.txt
git commit -am "commit_3_A"
touch some-more-changes.txt
git checkout -b fix/B --no-track master
git add -A
git commit -m "commit_1_B"
git push --set-upstream origin fix/B
git log --oneline --graph --all

暫無
暫無

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

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