Git没有拉所有文件,但检查分支有吗?

时间:2015-03-13 16:51:13

标签: git github merge

所以我在分支A。我做git pull origin master它告诉我,我是最新的。我结帐大师,我看到文件1.我结帐分支A和文件1不在那里,即使它告诉我,我是最新的。

我再次结帐大师,创建分支B.我结帐分支B,文件1就在那里。我做git pull origin A和File 1不再存在。如果我反转过程并创建B然后从A推送到B,也会发生同样的情况。所以此时我无法推送到掌握,因为看起来我会删除所需的文件,但我无法拉动并获取它们。

我想要分支A中的更改,但我没有删除任何文件。出于某种原因,它的行为就像我删除了文件1,即使我意外删除了它,为什么不拉回来给我?

有没有办法可以告诉git将所有丢失的文件从一个分支发送到另一个分支?

2 个答案:

答案 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之间的更改。

使用gitkgit log --graph --decorate --oneline可视化这些更改也很有用。 gitk master...origin/mastergitk 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