十二条git实用总结
本文总结了常见的十二个git使用场景的处理方法,足够应对日常学习工作中对git的使用
git命令
1.添加SSH验证免登陆
在用户文件夹下观察是否存在.ssh文件夹,如果存在,并且其中包含id_rsa.pub和id_rsa两个文件,直接执行第二步,否则执行以下命令:
ssh-keygen -t rsa -C "xxx@xxx.com"
在github的主页,进入settings界面,进入SSH and GPG Keys选项卡,添加一个新的SSH Key,并将上一步生成的id_rsa.pub(也就是ssh的公匙)复制到对应位置,保存即可。
检查远程仓库地址是否为SSH模型的地址,如果为HTTPS模式,则仍需要输入密码,但是现在github不再开放通过用户名和密码的登录方式。
2.将本地项目上传GitHub
2.1.如果是新项目,本地还没有代码
git init
2.2.如果想直接使用远程的代码
git clone <远程仓库地址>
然后直接在该项目中修改
2.3.如果是一个本地开发的项目,想要上传到GitHub
首先新建GitHub仓库
然后添加远程仓库
git remote add origin 仓库地址
如果GitHub上添加了readme.md文件或者.ignore文件,意味着在GitHub上已经存在了一个独立的git树,需要在拉取的时候将本地Git树和远程Git树融合。
git pull origin <想要操作的分支> --allow-unrelated-histories
如果存在冲突,则先解决冲突,并提交一个merge版本
将新的代码上传到github,-u用于指定新的版本
git push -u origin 想要操作的分支
- 如果添加错了,可以remove掉远程库,要使用本地名称(一般使用origin)remove掉
git remote -v 查看远程仓库地址
git remote rm origin
3.本地分支管理
指令 | 作用 |
---|---|
git branch -a | 查看所有分支 |
Git branch <分支名> | 新建指定分支 |
Git branch -d <想要删除的分支> | 删除指定分支 |
Git branch -M <新的分支名> | 修改当前分支名称 |
git branch -v | 查看远程分支 |
git branch -m old new | 重命名 |
4.从远程拉取一个本地不存在的分支
git checkout -b 本地分支名 origin/远程分支名
5清除已有的修改
5.1 情况一:工作区有修改,暂存区未暂存,还原到上次提交
git checkout [--] <文件名>
--的作用是表明后面的是文件名而不是分支,因为git checkout还有切换分支的作用,可以不加
位置 | 情况一 | 执行后 |
---|---|---|
工作区 | Version1 | Version0 |
暂存区 | version0 | Version0 |
上一次提交 | Version0 | Version0 |
5.2.情况二:工作区有修改,已提交暂存区,想舍弃暂存
git reset [--hard] [HEAD] <文件名>
(丢弃暂存区的更改,不修改工作区,执行后会提示工作区的修改情况)
位置 | 情况一 | 执行后 |
---|---|---|
工作区 | Version1 | Version1 |
暂存区 | Version1 | Version0 |
上一次提交 | Version0 | Version0 |
5.3.情况三:工作区有修改,提交暂存区后,又进行了后续修改,想退回到暂存区的状态
git checkout [--] <文件名>
位置 | 情况一 | 执行后 |
---|---|---|
工作区 | Version2 | Version1 |
暂存区 | Version1 | Version1 |
上一次提交 | Version0 | Version0 |
5.4.情况四:工作区有修改,提交暂存区后,想要回退到上一次提交时的状态
git reset [--hard] [HEAD] <文件名>
git checkout [--] <文件名>
位置 | 情况一 | 执行后 |
---|---|---|
工作区 | Version1/version2 | Version0 |
暂存区 | Version1 | Version0 |
上一次提交 | Version0 | Version0 |
6.取消文件跟踪
修改.ignore文件,增加要忽略的文件
git rm -r --cached <文件名>
可以直接执行一次提交,或者跟随下一次代码修改一起提交
git add .
git commit -m “你的注释”**
7.退出编辑模式
在merge的时,完成merge操作后会进入一个编辑页面,编写merge记录,和vim的操作方式是一样的,一般我们都会直接退出
- 按键盘上的
i
键可进入插入模式 - 这时可以修改最上方的黄色部分,改成你想写的合并原因
- 按键盘上的
Esc
键退出插入模式 - 最后在最下面输入
:wq
后按回车键即可
8.版本回退
git reset --hard HEAD^
完全切换到其他版本, HEAD^
指上一个版本, HEAD^^
指上上个版本,可以查看log确定回退的版本
9.缓存修改
有些修改未完成,想保存修改,使用 git stash
命令
一定一定要记得add!!!!,否则你没有add的代码将会消失!!!!
命令 | 作用 |
---|---|
Git stash save "缓存信息" | 缓存修改 |
Git stash list | 查看缓存列表 |
Git stash pop [stash@{num}] | 弹出缓存 |
Git stash drop [stash@{num}] | 删除缓存 |
10.利用码云下载GitHub项目
github在国内的clone的速度较慢,比较快的方法时使用码云,先fork到码云上,再从码云上clone到本地,然后修改.git文件夹下的config文件,将origin地址改为github上的地址
11.关于SSL和超时错误
都是因为网路问题,切换VPN或者多尝试几次一般就好了。
12.merge出现问题,将回退到merge之前的状态
git reset .
git add .
git stash save "message"
git stash drop
13.强制结束merge
提示:All conflicts fixed but you are still merging
rm -rf .git/MERGE
14.GitHub合作
首先需要在GitHub仓库的Settings中邀请合作者
当合作者同一邀请后才能提交代码。
只在自己的分支上编写代码
15.添加tag
添加tag,主要用于标记版本
git tag -f <tag名>
将tag上传到github
git push --tags
16.关闭Git Warning: LF will be replaced by CRLF
git config --global core.autocrlf false
17.合作标准流程
-
在branch-a分支上执行git pull branch-a
-
更新私人分支代码
-
git push branch-a (推送私人分支)
-
git checkout dev (切换到开发汇总分支)
-
git pull dev (拉取开发汇总分支)
-
git merge branch-a (融合私人分支),如有冲突解决冲突,然后 git add, git commit
-
git push dev (推送开发分支)
-
git checkout branch-a (切换私人分支)
-
git merge dev (融合合并好的开发会中分支)
最后,多使用IDE提供的git工具,少自己写命令(容易写错www)