好吧,作为20年的SVN和CVS专家,我发现git非常具有挑战性.我已经阅读了很多指南,没有找到可以理解的指南.很多道歉因为我对git的愚蠢.
我们只使用master,没有分支.Git被逼我们了.
我有一个js文件,我"拥有"没有其他人应该触摸它.但有人做了,并检查了它.我试图检查我的副本,并失败.所以我拉出了更新版本,它用很多<<<和>>>条目"破坏"了我的副本.
基本上,我想拒绝他所有的改变,并用我的改写覆盖它们.使用SVN,我只需复制我的本地js文件,删除它,从repo结账以获取有问题的文件,复制我的副本,然后检查结果.真的很简单.
我没有找到一种方法在git中执行此操作,就像删除文件一样,它认为您要删除它.
所以我尝试编辑合并的文件,但混淆了哪些行是新的,哪些是旧的.所以现在该文件无法使用.我已"丢失"了我的本地副本.
我读到了这个:"git push origin master --force"但是:
所以我假设我必须回到之前的本地提交来恢复那个文件.我能找到的唯一方法就是"git checkout [revision]." 但是,如果我这样做,我不再是主人了,不知道如何回到它.此外,我希望它不会让我,因为我编辑并保存了问题文件,所以它不会让我结帐前一个.版.我假设我必须提交损坏的文件,然后尝试返回两个提交,备份文件,然后再次在新的目录checkout master中,覆盖文件,然后检查它.
所以我有两个问题:
use*_*893 17
你的两个问题可以用同样的方式解决:
git checkout HEAD my/filename.js
Run Code Online (Sandbox Code Playgroud)
其中HEAD是文字(当前分支名称的git简写),my/filename.js应替换为文件的实际文件名.这会将您的文件恢复到更新前的状态,从而有效地"撤消"来自其他人的更改.在本地提交此结果,然后正常推送(如果您从中央仓库更新,则不需要--force)
通常,解决合并冲突的方法是编辑文件,直到它按照您希望的方式运行,然后运行git add.git(和svn)之所以留下"<<<"和">>>"导致你的文件在合并或更新失败后的原因是为了帮助你或你的工具解决合并问题.设置一个工具来帮助你这样做可能是值得的,但遗憾的是它不是开箱即用的.
顺便说一句,你从SVN用你已知的好文件替换不需要的文件的初始本能可以正常工作一步:删除文件后,恢复好文件并运行git add my/filename.js.在这种情况下,checkout还会将其添加到索引中(使用git状态进行双重检查),这样您就可以立即提交(本地),然后将(现已解决的)合并冲突推送回中央存储库.
你可能只想恢复其他人的提交.如果您有未提交的本地更改,那么使用git非常重要.如果你这样做,你可以以非常难以退出的合并结束.
git merge --abort
Run Code Online (Sandbox Code Playgroud)
将通过将其他更改拉入您的代码中止您已启动的合并.这可能会在您开始拉动之前恢复未经检查的更改.如果文件中有大的更改,则在其他地方进行备份,如果不起作用,请在之后手动合并.
跑
git log --stat
Run Code Online (Sandbox Code Playgroud)
并找到更改文件的提交.跑
git revert <commit id>
Run Code Online (Sandbox Code Playgroud)
哪里是id然后提交更改您的文件.这将进行一次提交,回滚另一个提交,推动该更改.如果其他人在提交中有其他内容,那么他们可以通过还原您的还原并编辑提交来删除文件中的更改然后再次推送更改来修改其修补程序.
在未来,当你拉动时,永远不会有未经检查的变化,这会带来麻烦.
您还可以考虑服务器上的提交挂钩,以阻止除将来提交到该文件之外的其他人.
要完全删除合并冲突中的外部更改,您可以使用
git checkout --ours -- <path-to-file> && git add <path-to-file>
Run Code Online (Sandbox Code Playgroud)
这可以解决与使用您的版本的特定文件的冲突。添加是必要的,可以告诉 git 冲突已解决。