所以我在分支A。我做git pull origin master
它告诉我,我是最新的。我结帐大师,我看到文件1.我结帐分支A和文件1不在那里,即使它告诉我,我是最新的。
我再次结帐大师,创建分支B.我结帐分支B,文件1就在那里。我做git pull origin A和File 1不再存在。如果我反转过程并创建B然后从A推送到B,也会发生同样的情况。所以此时我无法推送到掌握,因为看起来我会删除所需的文件,但我无法拉动并获取它们。
我想要分支A中的更改,但我没有删除任何文件。出于某种原因,它的行为就像我删除了文件1,即使我意外删除了它,为什么不拉回来给我?
有没有办法可以告诉git将所有丢失的文件从一个分支发送到另一个分支?
答案 0 :(得分:1)
根据你的描述,听起来你删除了branchA中的File1。从origin/master
拉出时,Git发现origin/master
中的File1没有发生任何变化,并且该文件已在branchA中删除,因此当它们合并它们时,它会合并为删除File1。请记住,“拉”只是一种获取和自动合并两个分支的方式。
如果要在branchA上恢复File1,有几个选项。如果你尚未推动它,一个选择只是改变并摆脱删除。或者,您可以运行git checkout master -- File1
来检查master上存在的File1的版本,并将其添加到branchA上的提交中以将其添加回来。
如果你想比较分支,只需要git diff
即可。如果您只想查看已添加,删除或更改的文件,可以使用git diff --stat
。尝试执行git diff --stat master origin/master
以查看主分支与origin/master
之间的更改。
使用gitk
或git log --graph --decorate --oneline
可视化这些更改也很有用。 gitk master...origin/master
或gitk origin/master...branchA
可以帮助您查看其中一个分支中的提交,而不是另一个分支。
答案 1 :(得分:0)
分支A中的一个提交会删除您关心的文件(或多个文件)。既然你说你不能因为这个推动分支A,我假设你还没有发布你的历史,并想重写它。
要查找删除文件的提交,请尝试:
git log --stat master..A
然后尝试:
git checkout A
git rebase -i master
并使用'标记您要修改的提交以进行编辑。
然后使用查看该提交的状态:
git status
撤消删除这些文件:
git reset file-that-was-deleted
git checkout -- file-that-was-deleted
恢复变基:
git rebase --continue