Visual Studio 2013 Github提交死锁
我和几个朋友正在通过github开展一个项目。 我们都在分享同一个分支,这可能是也可能不是一个好主意。
我编辑了一些代码并提交了更改。 我去pusj提交给github(我正在使用Vis。Studio 2013,它是内置的Git工具),但是我得到了这个错误:
“有新的远程更改,你必须拉动它们才能推动。”
所以我试图拉远程更改,我得到这个错误:
“发生错误详细信息:libgit2。Category = 21(MergeConflict)引发了一个错误,未提交的更改将被merge”
我试图改变分支,以便我可以推动我的变化,然后合并他们与第一个分支,但我得到这个错误:
“由于没有提交更改,因此无法切换到主服务器。在切换分支之前提交或撤消更改,有关详细信息,请参见”输出“窗口。
我不知道该怎么做,除了可能将我的更改通过电子邮件发送给我的一个朋友,并让他们推送我的更改。 但是我不知道我的本地提交会发生什么。
编辑
问题解决了。 确保同步所有提交后,我打开git bash,并拉远程提交。 几次尝试后,我回到Visual Studio,发现它已经注册了合并。 我解决了所有冲突的文件,并能够推动项目。
感谢所有回答的人!
听起来很愚蠢,我只是去命令行 ,它的工作。
- Git状态
- Git拉
- Git推
一切正常。
如果我在Visual Studio中做了同样的事情,它不起作用。 去搞清楚。
当使用Visual Studio Git提供程序( VS 2013,VS2015 )时,在执行本地提交的情况下也会出现这种情况,但是在尝试从服务器提取并合并时,会出现以下错误消息:
“未提交的更改将被合并覆盖”
仍然显示,Pull操作被取消。
这可能是因为在本地,有未经跟踪的文件不是本地提交的一部分,而是远程拉的一部分; 合并解决scheme无法处理这种情况。
通常 ,当一些文件(如T4模板输出)包含在一个工作站的提交中,而不是其他文件中时,会发生这种情况。
此外 ,在Visual Studio 2015中 ,在使用MVC6项目时(写入时),在wwwroot文件夹中的文件已包含在一个工作站的提交中,而不是另一个工作站上时,可能发生这种情况(可能的原因之一是尝试使用相同服务器存储库的工作站上的.gitignore文件是不同的)。
解决:
a)查看团队资源pipe理器>更改对话框。
b)确认实际上驻留在服务器分支中的任何Untracked文件将包含在你的提交中; 要做到这一点,右键单击并select添加。 或者,如果您打算将其覆盖,可以select删除。 请注意谨慎。
c)执行提交,然后执行提取,并执行所需的任何合并冲突解决scheme。
d)执行推送来更新您的远程存储库。
现在你试图基本上做你的分支uncommited变化的git merge
(拉只是获取+合并)。 Git正确地抱怨说这样的操作会覆盖分支中未被改变的变化。
要继续执行pull操作,您需要从工作目录中删除这些未被取消的更改。 有几种方法可以做到这一点
- 将它们提交到本地存储库
- 将它们藏起来,进行拉动操作,然后将它们在顶部拉上去除
- 提交,获取,重新绑定,然后合并
如果你是新手,我可能会开始选项#1。
作为GIT UI,Visual Studio 2013似乎缺乏成熟度。 即使在本地进行了所有更改之后,我也遇到了类似的问题。 对于在Visual Studio 2013中产生的推送错误,我build议使用Git Bash做一个git pull命令。 命令行的pull命令比VS UIfunction强大得多,并且会克服一些问题。
作为对Walter Schultz的回应,你会得到这个错误,因为你似乎试图在版本控制中保留二进制和汇编文件(dll和exe)。 二进制文件不可编辑且不可合并,因此不应将其包含在版本控制中。
为了从GIT存储库中排除这些文件,可以创build一个.gitignore文件并包含以下项目:
--- begin .gitignore file ---------------- ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates *.cache # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ x64/ build/ bld/ [Bb]in/ [Oo]bj/ Dev/ bin/ --- end gitignore file ----------------
创build.gitignore文件后,进入本地存储库,删除/ bin /文件夹中的所有文件以及其他不想跟踪的文件。
然后推送到本地并将您的代码同步到服务器存储库。
希望这可以帮助。
同样的事情发生在我身上,当我尝试切换分支时,我犯了所有的变化,并得到同样的错误。
我意识到有一个文件,我select“忽略”,我留在“排除的变化”。 显然,VS2013没有妥善处理这个例外。
所以经过多次尝试,我想出了一个简单的解决scheme:
- 我将文件从“排除的更改”忽略到“包含的更改”;
- 我做了一个本地提交;
- 切换分支没有问题;
我没有任何不确定的变化,在进行合并开发时仍然有同样的错误。 我试过了:
- git状态,然后
- 混帐拉
然后尝试合并再次开发,错误不再显示。 我不得不解决一些冲突。 我可以想象,只有第二个命令是真正相关的,但我不知道这里发生了什么,所以我宁愿logging所有的步骤。
我不得不下载命令行工具,它允许我签出主分支(也在VS中检查出它)。 然后,我做了一个git pull,然后由于与远程和本地分支合并的冲突而带来了额外的错误。 解决了这个问题,解决了冲突,承诺和同步。
从命令行“git merge {branch name}”运行这个,产生了一个更具体的错误。 “.gitignore合并冲突”
我有一个类似的问题,我创build一个新的MVC项目,并为任何合并新分支提供了一个错误,我没有一个月前创build的项目。 我从良好的工作项目中添加.gitattribute文件到上面提到的错误的项目,并解决了问题。 现在我可以合并,没有任何问题。
我只是将.gitignore添加到主人并提交。
我不得不在VS 2013中运行git加载项,而没有加载解决scheme。
我的问题是VS启动application.vshost.exe加载Windows应用程序项目时,因此阻止Git加载项执行一些操作。
已经使用VS工作室模板的.gitignore,但是这是不同的。
我在VS 2015中遇到了这个问题,唯一解决的就是重启VS. 上述其他情况均不适用。