前提:之前这个AuthorizationController文件,是叫authorizationController,后面改了AuthorizationController。说下情况,但是我也不知道和这个有没有关系
问题:现在遇到一个非常奇怪的问题,凡是从develop分支切换到其他分支,不管是develop切换到master分支,还是切换到gjm分支、A分支、B分支,都会自动把AuthorizationController文件删除掉,一头雾水了,有没有大神能解答下
我尝试在gjm分支上使用git checkout app/Http/Controllers/Admin/AuthorizationController.php能恢复文件,但是等我切换到develop分支,再切换回来,又被删除了
补充了执行git checkout app/Http/Controllers/Admin/AuthorizationController.php命令的过程
我试了下,把 git
默认的忽略文件大小
关闭后,确实能复现
git config --local core.ignorecase false
步骤:
clone
一个仓库git config --local core.ignorecase false
默认分支
切换到一个新分支
,随便修改一个文件的大小写后 commit
delete
掉了要解决得在修改文件名的时候用 git mv
来操作
git mv [fileName] [newFileName]
猜测是因为你们之前 尝试把 authorizationController 改成 AuthorizationController,但是却发现 Git 里面居然没有变化,可能时因为给 git 配置了不区分文件名的大小写,所以这在 git 看了就好像没有什么变化一样,所以你们就有人直接把这个文件删除掉了,然后 commit,然后再加回来,或者你们的操作步骤就直接是删除、重新添加,而不是改名。
因为在 Windows 上,文件是不区分大小写的,但是 Git 里面却记录了两个仅大小写不同的文件名。
当再在 Windows 下操作时就会有问题了,因为 git 记录到的是你 删除了 authorizationController ,而 Windows 又不区分大小写,他就认为 authorizationController 就是 AuthorizationController,所以把 AuthorizationController 给删掉了。
使用以下步骤在 Linux 下创建一个可重现的包。
$ mkdir rename-files$ cd rename-files$ echo '123' > foo.txt$ echo '123' > Foo.txt$ git init$ git status$ git add .$ git status$ git config user.name foo$ git config user.email foo@example.com$ git commit -m "add 2 files"$ git status$ git checkout -b b01$ git status$ rm foo.txt$ git status$ git add .$ git commit -m "rm foo.txt"$ git bundle create all.bundle b01 master
然后把这个 all.bundle 拷贝到 Windows 上,执行
git clone all.bundle
就会看到一个提示。
Cloning into 'all'...Receiving objects: 100% (5/5), done.warning: the following paths have collided (e.g. case-sensitive pathson a case-insensitive filesystem) and only one from the samecolliding group is in the working tree: 'Foo.txt' 'foo.txt'
其实已经告诉了问题了,现在进去就只能看到 foo.txt
,而看不到 Foo.txt,在 Linux 下的 master ,这两个文件都是存在的。
当现在切换的 b01 分支时,就会出现问题了,这时候就发现 Foo.txt 被删除了(我们刚刚在 Linux 下的 b01 删除的)。
On branch b01Your branch is up to date with 'origin/b01'.Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) deleted: Foo.txtno changes added to commit (use "git add" and/or "git commit -a")
如果此时使用 ls 命令,或者查看文件系统,就发现,刚刚的 foo.txt 不见了。
解决办法
git reset --hard HEADgit checkout mastergit mv foo.txt Foo.txt
ok。现在应该就可以了,你再切到 b01,就正常了。
git add .git commit -m '自定义message'git checkout 分支
要做一次提交(commit)才行吧
问题:现在遇到一个非常奇怪的问题,凡是从develop分支切换到其他分支,不管是develop切换到master分支,还是切换到gjm分支、A分支、B分支,都会自动把AuthorizationController文件删除掉,一头雾水了,有没有大神能解答下
答案:这个问题可能是由于git的配置或者历史记录导致的。有几个可能的原因:
解决方案:
git log -- path/to/AuthorizationController
查看该文件的提交历史,确保没有重命名或删除的历史记录。git mv
命令而不是直接更改文件系统上的文件名。这样可以确保所有分支都一致地跟踪这个重命名操作。问题内容: 我们目前有一个使用的詹金斯管道。每个git分支都执行一个声纳分析,使用该属性创建一个声纳项目 。这是非常有用的,因为在合并每个分支之前都会对其进行分析,当一个分支与master合并并在GIT上消失时,该问题就会出现,该项目将继续在sonarqube上进行,并且需要手动删除。有没有办法自动做到这一点?或其他任何建议? 问题答案: 您可以定义以下方法来执行此工作,然后根据需要或在诸如合并/
我们将尝试在github中创建一个工作流,其中每个票据都是master的分支 票据完成后,工作将合并到暂存中,在暂存中执行回归和集成测试,然后将其合并到主控中。 一个团队领导提出了合并后旧票分支的问题。 我发现了这个脚本,想知道它是否能在我们的环境中工作。我们只想删除已经合并到主目录中的分支。
我在Git上的项目中有三个分支,我将项目的最后一个稳定版本保存到分支,然后使用另外两个分支进行重大重写/重构。在“重写和重构”过程中,我删除了5个文件(JAVA类),这些文件以前在稳定程序中。现在,当我将分支切换回时,最近提交到分支时,这些文件也会丢失,但我还没有合并这些分支。这怎么可能,我该怎么解决? 更新: 我刚刚发现Git工作正常,因为当我切换到主分支时,删除的文件被恢复到文件夹中。问题似乎
删除列出的分支的所有尝试(根据下面的答案)都会导致错误: 我使用的是: git 1.7.4.1 ubuntu 10.04 GNU bash,version 4.1.5(1)-release GNU grep 2.5.4
若要切换作业的分支,就要进行checkout操作。进行checkout时,git会从工作树还原向目标分支提交的修改内容。checkout之后的提交记录将被追加到目标分支。 HEAD HEAD指向的是现在使用中的分支的最后一次更新。通常默认指向master分支的最后一次更新。通过移动HEAD,就可以变更使用的分支。 Note 提交时使用~(tilde)和^(caret)就可以指定某个提交的相对位置。
刚接触Git不久,误操作把Git 的本地分支文件夹给Shift delete了,本地分支还没有commit和push到Server远程分支上去,现在没有本地分支,如何删除Server上的远程分支呢? 似乎没有Push过本地分支,无法直接删除远程分支