git 命令
初始化本地仓库
1 | git init |
在github上面创建远程仓库的时候,不要创建readme.md,即可用上述命令创建成功
【问题】
- 因为本地创建了readme.md,导致提交的时候造成了冲突
gitignore文件
项目初始化的时候添加.gitignore
因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照linux的方式来新建.gitignore文件。具体步骤如下:
- 在需要创建 .gitignore 文件的文件夹, 右键选择Git Bash 进入命令行,进入项目所在目录。
- 输入 touch .gitignore 在文件夹就生成了一个“.gitignore”文件。
- 然后在”.gitignore” 文件里输入你要忽略的文件夹及其文件就可以了。
在添加.gitignore文件的时候,参照 gitignore 原则
查看
查看commits
commits,它在git中扮演了一个重要角色,我们平常用的一些操作git clone ,git commit 都会产生commits,通俗的讲这个就是版本号。使用如下命令
1 | git reflog |
回退
push 成功后回退
我们在使用Git进行版本控制时,有可能会出现这种情况。git push后发现提交的内容不是想要的,这时候我们怎么做呢,提交上去的内容是没有删除按钮的(比如github,或码云)。所以我们需要一些手段将提交上去内容撤销下来。
命令详解
首先将本地的内容回退到自己想要的版本。回退版本我一般使用。在这里我们要明确的一点是git reset可以看成不产生commits,只是改变了当前HEAD指向的commits。
1 | git reset |
其中这条命令中又分为两种
git reset –sort
git reset –hard
前者表示只是改变了HEAD的指向,本地代码不会变化,我们使用git status依然可以看到,同时也可以git commit提交。
后者直接回改变本地源码,不仅仅指向变化了,代码也回到了那个版本时的代码,所以使用是一定要小心,想清楚。
如果只是回退到上个版本可以使用
1 | git reset -–soft xx版本号xxxx |
也可以使用下面的命令
1 | git reset –soft HEAD~1 |
因为前面说了HEAD就代表当前,所以上一个版本其实就是当前-1
当我们使用下面的命令时,发现并没有发生什么变化,因为HEAD表示的就是当前版本。
1 | git reset HEAD |
示例
git reset –soft HEAD~1
我们可以知道其实HEAD已经指向上一个commits了,我们可以是用git reflog验证下
我们再使用git status看看,发现没,代码还在缓存区中
这时候就好办了,我们选择很多,可以直接修改代码,再commit,也可以取消git add 命令,指令如下
git rm –cached xxx文件名xxx
git rm
至于这两者的区别看这里吧[GIT]代码在GIT ADD之后如何取消
ok 到现在为止,本地的版本已经达到我们想要的了,现在只需要改变远程仓库的版本了,对的,我们只需要在git commit 后,再使用 git push origin 分支名 就可以将新的代码覆盖掉远程仓库版本代码,这样子就达到了撤销远程仓库代码一样的效果,但是这里有点点问题,先接着看吧
提交失败,因为当前分支的版本低于远程分支的版本,所以要想覆盖掉它,必须使用force
git push origin 分支 –force
ok,大功告成
分支
把分支推送到远端
https://blog.csdn.net/kakadiablo/article/details/79517985
创建分支
删除分支
- 删除本地分支
1 | git branch -D <BranchName> |
- 删除远程分支
1 | git push origin --delete <BranchName> |
查看远程分支
- 使用如下git命令查看所有远程分支:
git branch -r
- 查看远程和本地所有分支:
git branch -a
其中远程分支是红色的
- 查看本地分支
git branch
在输出结果中,前面带
*
的是当前分支。
拉取远程分支并创建本地分支
方法一
使用如下命令:
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。
方式二
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系。
本地分支和远程分支
https://blog.csdn.net/carfge/article/details/79691360
建立映射关系的作用
建立映射关系(或者为跟踪关系track)。
这样使用git pull或者git push时就不必每次都要指定从远程的哪个分支拉取合并和推送到远程的哪个分支了。git branch -vv
输出:
上面的本地分支和远程分支都有映射关系,如果没有,就需要手动建立:git branch -u origin/分支名
,
或者git branch --set-upstream-to origin/分支名
origin
为git地址的标志,可以建立当前分支与远程分支的映射关系。
撤销本映射关系
git branch --unset-upstream
之后可以再次用git branch -vv
查看本地分支和远程分支映射关系
本地分支只能跟踪远程的同名分支吗
- 答案是否定的,本地分支可以与远程不同名的分支建立映射关系
操作和之前的一样,只是可以指定和本地分支名不同的远程分支名,然后使用git branch -vv
查看映射关系,可以发现建立映射成功。
常见问题
远程库‘origin’不存在
【 问题描述】
fatal: ‘origin’ does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
【 解决方案】
首先,检查你的起源是设定的运行
1
git remote -v
显示
orgin git@github.com:chaorwin/chaorwin.git (fetch)
orgin git@github.com:chaorwin/chaorwin.git (push)
“origin” 不存在
2.重命名它,或改变URL,删除它,然后添加正确的一个。
git remote remove orgin
3. 增加一个
git remot add origin git@github.com:chaorwin/chaorwin.git
4. git push origin master
文件大小超过限制
问题描述:
github RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
出现此问题有可能是上传大小限制
执行如下命令:
1 | git config http.postBuffer 524288000 |
在更改了文件大小之后,可能会出现如下错误:
curl 56 OpenSSL SSL_read:SSL_ERROR_sysCALL
因为服务器的SSL证书没有经过第三方机构的签署,所以才报错。解决方案如下:
第一步,克隆远程仓库时,用env命令设置GIT_SSL_NO_VERIFY环境变量为”ture”,并同时调用正常的git clone命令。完整的命令如下:
1 | env GIT_SSL_NO_VERIFY=true git clone https://<host_name/git/project.git |
第二步,在克隆完毕的仓库中将http.sslVerify设置为”false”。完整的命令如下:
1 | git config http.sslVerify "false" |