我工作的一个Git仓库由我(所以是的,我知道的含义,这样的警告),不知怎么的一棵树上了,当它不应该被推后提交.
现在我试图撤回,它抱怨数百次合并冲突.
有没有办法告诉git 强制覆盖来自远程服务器的本地任何和所有文件?有没有比做更快的方式git reset --hard HEAD~1然后做拉?
在同样的说明中,有没有办法用简单的合并做同样的事情?我见过的所有内容都建议在合并冲突解决阶段检查每个文件,但是有数百个文件,手动无法执行此操作.
我已经完成了一些类似的SOQ,并没有看到适合这种情况的解决方案.
我注意到在许多文件中都有一个用于缩进的标签和空格的混合.我们遵循的编码标准目前使用4个空格作为选项卡.
虽然这应该在它发生时得到解决,但我现在需要考虑它并且想要修复我遇到的文件.问题是有两个团队使用不同的代码分支,我们最终必须合并这些分支.如果我们将分支的所有文件更改为正确的格式并尝试合并它会发生什么?最终会难以这样做吗?它会告诉我很多冲突吗?理想情况下,像git merge一样忽略空格,但我不知道如何知道选择哪个版本.
从反应的观点来看,是否有更好的解决方案?
这主要是技术领导,代码lint,代码审查问题,但我目前不在那个位置或案例中.我能轻易解决这个问题吗?(不幸的是,违法者处理合并是不可能的!)
我想用git使用p4merge,但我得到:
启动p4merge时出错:"path/myFile"是(或指向)无效文件(这列出了文件的BASE,LOCAL,REMOTE和标准版本).
Git告诉我有关冲突然后它询问我是否要启动mergetool配置(p4merge)然后我得到上面的错误.
附加说明:它发生在任何文件!
有关这是什么以及如何解决它的任何线索?
让我们假设我们有一个开发分支'A'和两个子分支'B1'和'B2'(都取自A).让我们说你在B1和B2的整个项目中运行格式代码命令(在我们的例子中是ReSharper的清理代码).
现在,当我们尝试将B2合并到B1时,Git将报告项目中所有文件的冲突(在我们的例子中相当大).当仔细观察每次冲突时,看起来Git认为即使在B1和B2中都进行了完全相同的改变,也会发生冲突(?)
有没有办法,自定义驱动程序/ git属性等,如果B1和B2中的文件完全相同,将使Git合并操作不报告冲突?
也许我错了,也许它是一个空白/行结束问题(例如B1和B2中的不同行结尾),在这种情况下我可以在堆栈溢出中找到解决方案.
我有一个在TFS中启动的项目,然后转移到Git.不幸的是,将它移动到Git的人只是检查当前文件而不是使用git-tfs.我试图在我使用git-tfs从TFS中提取的提交之后,在Git中重新设置他的新提交.
要做到这一点,我只是简单地在git-tfs提交之上重新提交他的提交.(我意识到这会弄乱远程Git分支机构,但我们是一个小团队,它会没事.我也尝试过挑选樱桃,但我遇到了同样的问题.)
我遇到的问题是一组看起来像这样的冲突:
<<<<<<< HEAD
namespace OurNiftyProject
{
public enum CardType
{
Visa = 0,
MasterCard = 1
}
}
||||||| merged common ancestors
=======
namespace OurNiftyProject
{
public enum CardType
{
Visa = 0,
MasterCard = 1
}
}
>>>>>>> Add a bunch of stuff.
Run Code Online (Sandbox Code Playgroud)
看来这是添加这些文件的TFS端提交和添加它们的Git端提交之间的冲突(因为Git repo开始为空).
逻辑上可能是跳过这个提交,但也有一些文件(比如几百个中的十个)是新的.当然,那些不会引起冲突.
为什么Git不能自己弄清楚两个文件是否相同?即使我在使用--ignore-whitespacerebase时使用,Git仍会显示几十个这样看似相同的文件.我对如何解决这个问题感到茫然.
在计算签入版本之间的差异时,哪些源代码控制产品具有忽略空格,大括号等的"差异"功能?我似乎记得Clearcase的差异做了这个,但Visual SourceSafe(或至少我使用的版本)没有.
我问的原因可能很典型.团队中四个完全合理的开发人员有四种完全不同的格式化代码的方式.在检查出其他人最后更改的代码后,每个人都会立即运行某种程序或编辑器宏来按照他们喜欢的方式格式化.他们进行实际的代码更改.他们签入他们的更改.他们去度假.两天后,这个已经运行两年的计划爆炸了.分配给bug的开发人员在版本之间进行差异,并发现204个差异,其中只有3个具有任何重要性,因为差异算法是蹩脚的.
是的,你可以有编码标准.大多数人都觉得它们很可怕.一个解决方案,每个人都可以吃蛋糕,吃它似乎更好.
=========
编辑:感谢大家提出一些很好的建议.
我从中得到的是:
(1)具有插入式差异的源控制系统是优选的.
(2)找到具有合适选项的差异.
(3)使用良好的源格式化程序并确定签入标准.
听起来像是个计划.再次感谢.
我周末在家里做了一些工作,并使用git将代码更改合并到我的办公室计算机(通过vpn连接),并发现了一些非常难看的合并问题.
首先,合并应该非常干净,因为星期五在办公室里已经完成了所有工作,我只在周六和周日对我的家用电脑进行了更改.但是,当我将更改提取到我的办公室计算机时,我最终遇到了大量的合并冲突.
我清理了合并冲突,但后来我发现许多文件(从我可以告诉我周末更改的任何文件)都有<<<<<<< HEAD" and ">>>>>>> D1/master整个文件.例如:
diff --git a/web/Web.Controller/Helpers/FormsAuthentication.cs b/web/Web.Controller/Helpers/FormsAuthentication.cs
index 8571f53..4a9c9fc 100644
-- a/web/Web.Controller/Helpers/FormsAuthentication.cs
++ b/web/Web.Controller/Helpers/FormsAuthentication.cs
@@ -10,7 +10,10 @@
/// </summary>
public class FormsAuthenticationUtility : IAuthenticationUtility
{
<<<<<<< HEAD
=======
>>>>>>> D1/master
#region IAuthentication Members
/// <summary>
Run Code Online (Sandbox Code Playgroud)
我能够kdiff通过与从我的家用计算机复制的源代码进行比较来修复代码,但这似乎完全搞砸了.
有什么想法发生了什么?
我已经阅读了关于这个主题的大量问答,并遵循了该信的所有指示.但是我仍然头疼,试图将Git设置为使用WinMerge进行差异和合并.
我使用Git终端采取了以下步骤:
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Run Code Online (Sandbox Code Playgroud)
我还在我的PATH变量中包含的目录中设置了一个脚本:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
Run Code Online (Sandbox Code Playgroud)
当我执行
git mergetool
Run Code Online (Sandbox Code Playgroud)
在Git终端中,我看到:
Merging:
first.txt
Normal merge conflict for 'first.txt':
{local}: modified
{remote}: modified
Launching WinMergeU.exe:
Run Code Online (Sandbox Code Playgroud)
因此在我看来,$LOCAL和$REMOTE变量并没有将任何内容传递给winmerge.sh脚本.我在这做错了什么?我必须在配置部分中假设它.
我和一个朋友分别在一个项目上工作.起初,我推了一个名为的文件夹,old-name然后从中取出.在它的中间,我决定重命名该old-name文件夹,new-name以便更好地将其与其他项目区分开来(我们只是说它old-name太通用了,而且new-name更具体).所以我告诉我的朋友也要重命名他的项目文件夹new-name.然后我们分开工作.
现在,他将他所做的工作推到远程服务器(在new-name文件夹下),当我尝试从服务器拉出时,所有这些冲突(重命名/添加)都会发生,显然new-name现在项目中每个文件都有一个额外的副本.
new-name/index.php (MINE)
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果没有这个git冲突重命名问题,我们怎么能解决这个问题呢?当然我可以手动解决冲突,但是由于git已经拉到我的仓库的这个新的额外副本,因此检查和删除的文件太多了.
谢谢