git迁移远程仓库同时保留所有提交记录和所有分支

问题 假设我有A、B两个github账号,如果我想将A的某个仓库转移到B,同时保留提交记录和所有分支,如果不使用官方的git clone,那么如何实现呢? 解决办法: 这里假设你的remote都是origin,同时已经在B上新建了一个同名的空的仓库: git clone –mirror <url_of_old_repo> cd <name_of_old_repo> 此时目录结构如下: git remote rm origin git remote add origin <url_of_new_repo> git push origin –mirror 总结: 网上有使用git checkout,先在本地把所有远程分支拉下来,然后再git push –all…

git如何删除已经push到远程的提交

前提 这里假设remote都是origin ,分支都为master。 注意:如果想单独删除git某个已经push的提交,那就只能删除最近的那个commit,而无法删除倒数第二个commit,而保留倒数第一个提交,如下 假设有A->B->C 三个提交,我们没法只删除B,而保留C,虽然可以通过rebase的方式实现,但是rebase过程中一堆冲突,对于大点的项目,很难实际操作。 我们只能删除B以及它之后的所有commit,即把B、C都删除,结果为 A。 方法一:git reset 先删除本地的: git reset –hard <commit hash> 然后push到remote: git push -f 但是为了安全,建议使用: git push –force-with-lease 方法二:git rebase 假设我们有3次提交: $ git log…

为github和gitlab设置多个ssh key(同网站多账号,不同网站多账号)

场景1: 1.公司有自己的gitlab,公司代码都是往这上面提 ,账号:john 2.自己平时学习的时候,代码是提交到github,账号:tom 为了同时支持这两种操作,一台电脑需要为不同的网站的用户各自创建单独的key。 解决办法 1.创建新的ssh key $ ssh-keygen -t rsa -C “tom@gmail.com” //github的用户 $ ssh-keygen -t rsa -C “john@gmail.com” //自建gitlab的用户 假设得到下面两对key,创建key的时候,指定key的名字,我们这里用用户名区分: ~/.ssh/id_rsa_tom ~/.ssh/id_rsa_tom.pub ~/.ssh/id_rsa_john ~/.ssh/id_rsa_john.pub 2.添加key到ssh中 可以先删除key缓存(可选): $…

TortoiseGit免SSH key配置

TortoiseGit默认使用的自带的ssh客户端,这样导致其需要配置ssh key,但是貌似只支持putty的key,我以前还傻傻的手动去转换key,这样很麻烦。前些天固态挂了,导致重装了系统,顺带重装了TortoiseGit,但是忘了怎么配置putty key,结果去google一搜,发现可以将TortoiseGit的ssh客户端指向git的,这样就免去了设置ssh key的步骤 ,又学了一招。 如下,打开TortoiseGit——settings——Network,将ssh client指向 git的ssh.exe : 参考:https://stackoverflow.com/questions/13516119/tortoisegit-with-openssh-key-not-authenticating-using-ssh-agent 来自为知笔记(Wiz)

git忽略文件名大小写的解决办法

好吧,在开发中遇到一个问题: ide直接修改文件名的大小写,但是git忽略文件名大小写的解决办法 我在Android Studio通过ide的修改文件名功能将一个”helloworld.java”的文件改名为”HelloWorld.java”。但是每次从git服务器上clone的时候,发现文件名又还原成了”helloworld.java”。导致项目报错。 每次手动修复只是治标,没有治本。 重现问题: 1.先创建一个TestGitIgnorecase,然后在里面创建一个helloworld.java。然后commit到本地仓库。 2.通过android studio的refactor里的rename选项将helloworld.java改名为HelloWorld.java。然后share到github上。 3.再从github上clone到本地,然后你会发现你clone的项目中,文件名依旧是helloworld.java。 更简单的重现: 假设hello.txt已经提交到仓库了,然后执行下面的操作: $mv hello.txt Hello.txt $git status On branch master nothing to commit, working directory clean 够奇怪了吧! 问题的分析: 从上面的问题,可以看到,git貌似是忽略了文件名的大小写的。也就是说,它认为两个是一样的。 git…