簡體   English   中英

為什么 git checkout master 應用來自新分支的更改?

[英]Why does git checkout master apply changes from new branch?

如果我從 master 創建一個新分支,然后進行一些更改,如果我提交更改然后 checkout master,我的更改會跟隨我回到 master。 我不明白...如果我在新分支中提交更改然后簽出 master,那么 master 保持不變。 這不是在 master 中進行不必要的更改的秘訣嗎? 這里正確的工作流程是什么?

git init
echo something > newfile 
git add newfile 
git commit -a -m "first commit"
git checkout -b dev
echo $(date) >> newfile 
git checkout master
[user@toolbox test]$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   newfile

no changes added to commit (use "git add" and/or "git commit -a")
[user@toolbox test]$ cat newfile 
something
Thu 26 Sep 2019 09:00:49 PM GMT
[user@toolbox test]$

But...

[user@toolbox test]$ git checkout -- newfile
[user@toolbox test]$ git checkout dev
Switched to branch 'dev'
[user@toolbox test]$ git commit -a -m "I dont get this"
On branch dev
nothing to commit, working tree clean
[user@toolbox test]$ git checkout master
Switched to branch 'master'
[user@toolbox test]$ git status
On branch master
nothing to commit, working tree clean
[user@toolbox test]$ cat newfile 
something
[user@toolbox test]$ 

我期待“結帳”只是切換分支。 但顯然我對 git 工作流程有些不理解。

這里的訣竅是了解您在工作樹上的文件中擁有的內容,如果您嘗試簽出另一個分支,git 將查看修改后的文件是否與您想要 go 和 HEAD 中的相同(沒有您未提交的更改)修訂版....如果相同,則 git 了解您要求進行的切換不是問題...您的工作樹更改(和新文件)將伴隨您進行切換。 但是,如果修改后的文件在 HEAD 和您想要 go 之間的文件不同,則 git 將拒絕簽出(當然,除非您強制執行)。 因此,總而言之,git 正試圖盡其所能遵循您的命令,並防止您(不情願地)破壞您的工作(尤其是尚未提交的工作)。 現在....話雖如此,您描述的過程的哪一部分讓您摸不着頭腦? git checkout -- newfile新文件部分嗎? 因為這正是您要求 git 以 HEAD 修訂版的方式設置文件的方式(換句話說,忽略我對此文件所做的更改並將其設置為我編輯之前的方式......它甚至可以用於將文件的內容設置為在另一個分支/標簽/修訂版上的方式......在這種情況下,您會將文件放入等待提交的索引中)。

暫無
暫無

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

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