本文总结了常见的23个git使用场景的处理方法,足够应对日常学习工作中对git的使用,全部来自于个人实践中的经验,精简有用,读完绝对不亏(doge)
文章目录
- 1.添加SSH验证免登陆
- 2.将本地项目上传GitHub
- 3.本地分支管理
- 4.从远程拉取一个本地不存在的分支
- 5清除已有的修改
- 6.取消文件跟踪
- 7.退出编辑模式
- 8.版本回退
- 9.缓存修改
- 10.利用码云下载GitHub项目
- 11.关于SSL和超时错误
- 12.merge出现问题,将回退到merge之前的状态
- 13.强制结束merge
- 14.GitHub合作
- 15.添加tag
- 16.关闭Git Warning: LF will be replaced by CRLF
- 17.查看每行贡献者
- 18.合作标准流程
- 19. 查看所有已执行的命令
- 20. 对最后一个提交进行增补或修改提交信息
- 21. 压缩提交
- 22.迁移项目
- 23.密码自动记录功能
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不再开放通过用户名和密码的登录方式。
如果是新安装的git,要记得配置用户信息,包括邮箱和用户名,只有这样上传github的时候服务器才能验证你的身份。这很重要,没有这一信息服务器就不知道你是谁,不会通过验证。
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"
如果想为特定的任务配置用户信息,则不加--global
即可。
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清除已有的修改
checkout命令和reset命令确实是十分相似而且复杂的命令,在使用中经常让人困惑。
好在git官方教程里对checkout和reset命令的原理和使用进行了细致而一目了然的分析:关于checkout命令和reset命令的对比和分析
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 [HEAD] <文件名>
git checkout [--] <文件名>
或者基于hard模式的reset,但是这个操作十分危险,请慎重使用
git reset --hard [HEAD] <文件名>
位置 | 情况一 | 执行后 |
---|---|---|
工作区 | 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 -a <tag名> -m <tag信息>
将tag上传到github
git push --tags
16.关闭Git Warning: LF will be replaced by CRLF
git config --global core.autocrlf false
17.查看每行贡献者
使用git blame查看每行代码的提交者、查看指定代码的提交者。
git blame查看每行代码的提交者、查看指定代码的提交者。
18.合作标准流程
-
在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 (融合合并好的开发会中分支)
19. 查看所有已执行的命令
可以用于查看每个命令所属的版本号,在执行了版本回退但是不知道新版本的version时很有效
git reflog
最后,多使用IDE提供的git工具,少自己写命令(容易写错www)
20. 对最后一个提交进行增补或修改提交信息
如果有文件想要补充到上一次提交,则使用:
git add <file>
git commit --amend
如果没有文件提交,单纯想要修改提交的信息,则使用
git commit --amend
21. 压缩提交
可以基于reset或者rebase命令,将多个提交压缩为1个提交,可用于合并提交。
git reset --soft HEAD~2
git commit -m "new commit"
或者
git rebase -i
修改rebase文件,将pick命令改为squesh
然后执行rebase
22.迁移项目
有时我们需要将项目从一个git仓库迁移到另一个git仓库。
GitHub Document描述了相关步骤:Duplicating a repository
# 通过bare方法clone一个仓库,该仓库是一个特殊的仓库,其没有工作空间,每个本地分支对应一个远程分支
git clone --bare https://github.com/exampleuser/old-repository.git
# 进入新的仓库
cd old-repository.git
# 将该仓库克隆到新仓库,mirror将全部的提交和tag信息都推送到远程仓库
git push --mirror https://github.com/exampleuser/new-repository.git
关于bare参数和mirror参数的作用,可以自行查看git文档。
通过git clone --bare
命令生成的文件夹内容。
23.密码自动记录功能
打开密码保存
git config --global credential.helper store
关闭密码保存
git config --system --unset credential.helper
如果密码输入错误导致报错
可以修改windows凭证来使用户认证恢复正常
最后,多使用IDE提供的git工具,少自己写命令(容易写错www)
如果这篇文章对你有用,可以点个赞再走哦~~