git的诡异笔记

268 阅读3分钟

相信大多小伙伴在操作git不熟悉的命令时候会稍微颤抖,激动的心颤抖的手,接下来的操作会变成什么

be04c29a0ed646c9441990d589abcbf.png

git常用命令集合

git clone <remote-address>                            #拉取远程仓库
git init                                              #初始化本地仓库
git remote add <remote-name> <remote-address>         #将本地仓库与远程仓库关联 
git remote rm <remote-name>                           #删除本地仓库与远程仓库关联 
git remote set-url --add <remote-name> <remote-address> #添加一个push origin 的地址 
git add .                                             #将本地所有文件暂存
git commit -m 'xxx'                                   #将本地暂存文件提交
git push <remote-name> <remote-branch>                #将当前分支push到远程branch
git branch                                            #查看本地所有分支
git branch -r                                         #查看远程所有分支
git branch -a                                         #查看本地、远程所有分支
git fetch                                             #获取所有远程分支(不更新本地分支,另需merge)
git merge <remote-branch>                             #合并分支
git merge <remote-branch> --squash                    #将合并的分支commit进行压缩,会有一次额外的commit来“总结”一下,然后完成最终的合并
git pull <remote-name> <remote-branch>                #拉取远程branch,并merge到本地分支
    |__git fetch + git merge FETCH_HEAD
    
git checkout .                                        #放弃所有工作区的修改   
git checkout - filename                               #放弃对指定文件的修改
git checkout -f                                       #放弃工作区和暂存区的所有修改
git checkout -b                                       #新建并切换分支
    |__git branch <branch-name> + git checkout <branch-name>

#reset重置到commit-ID
git reset --hard <commit-ID>                          #放弃目前本地的所有改变
git reset --soft <commit-ID>                          #将本地修改记录add到暂存区
git reset <commit-ID>                                 #撤销所有在暂存区待提交的文件

#撤销某一次提交
git revert <commit-ID>                                #撤销commit-ID的提交

#eg:在prod上开发,想要切换去dev,如果没有commit
git stash                                             #将本地没有提交的内容进行缓存并从当前分支移除
git stash pop                                         #将缓存内容释放出来应用到当前分支

git文件名大小写问题

当你提交一个文件发现命名不规范,想要修改却发现push上去git仓库里没变

image.png

  • 新建一个Test.js文件,然后再提交推送上去
  • 然后将你本地文件名改为test.js,接着你去提交,发现没有任何修改可以提交

总结--git默认是对文件名大小写不敏感的,上面我们修改了文件名,但git并没有发现

解决办法

git config core.ignorecase false
/*
上面命令输完之后,我们再次git status发现有修改记录可以提交了,但是结局总跟我们想的差一步
push上去之后,发现远程仓库原来Test.js并没有被删除,依然存在,此时还是和test.js文件同时存在,
是不是会有一种感觉叫做:"解决了但没有完全解决"
所以我们可以使用下面这个命令
*/

git mv oldFileName newFileName
/*
 移动或重命名一个文件、目录
 注意:仅当git config core.ignorecase true时可用,否则会提示下面的错误:
 fatal: destination exists, source=A.txt, destination=a.txt
*/
当然也可以手动删掉本地Test.js add .后,再新建目标test.js文件

.gitignore

在我们项目文件里都会看到这么一个文件,让我们在提交git时候做些过滤操作

匹配规则
- [ ] 开头以'#'的行在.gitignore中起注释作用
- [ ] 以'dir/'结尾的表示屏蔽所有名为dir的文件夹都会被屏蔽
- [ ] 以'/dir'开头的表示仅屏蔽当前文件夹dir的文件
- [ ] ** 匹配多级目录,可在开始,中间,结束
- [ ] * 通用匹配零个或多个字符
- [ ] ! 开头的模式标识否定,该文件将会再次被包含
- [ ] '.a'屏蔽所有扩展名为a的文件
- [ ] .[abc]屏蔽所有扩展名为a,或者b或者c的文件
- [ ] ? 通用匹配单个字符

给所有新手上路,键盘一敲,手一按,期待就来了