Git 是一个分布式 的版本控制软件(即拥有本地仓库进行管理)。相较于集中式的版本控制软件,更加灵活更加快速。参考的教程:参考教程
1.配置用户密码list
bash
git --version
git config --global user.name "intWings"
git config --global user.email xxx@qq.com
git config --global credential.helper store #为了保存账号密码
git config --global --list
2.创建一个git仓库
bash
git init
git init Learn_git #这种写法会在路径下创建一个learn_git的文件夹成为git仓库
可见生成了.git文件夹:
3.四种状态
Untrack Unmodified Modeified Staged
4.仓库管理
bash
git add . #提交untrack的文件
git status #查看仓库状态
git commit -m "First Commit!" #提交并用-m加上信息,或者如果不加就会进入vim界面
git log #查看提交的日志
git log --oneline#查看提交的日志并简洁的输出
git ls-files #查看暂存区,ls所查看的是工作区
5.git reset命令
git reset是非常强大的命令,可以撤销错误的修改!有三种不同的模式:
格式类似于:
bash
git reset --soft 8734df4dee9d7e11a5d1e3d43b760480bdbe710e
这里的commit 号可以通过git log命令查到,注意这个不是回退这个操作而是回退到这个commit号所指定的提交!如果在hard模式下不小心reset了比较重要的文件,仍然可以用git reset来撤回(哪怕是hard模式)可以用以下命令查看之前做的操作:
bash
git reflog
然后git reset --hard到这个commit id之前就好了!
6.git diff命令
git diff命令用于比较差异。具体用法可以参考以下表格:
这里HEAD~指的是HEAD上一次提交的版本,如果是HEAD~2就指的是HEAD上两次提交的版本。
7.删除操作
删除操作有两种可以本地删除,然后add 再提交,也可以git rm删除,git rm删除的这个操作会被保存在暂存区,并且 git ls-files并不能查看到这个文件了,然后使用commit即可。
8. .igitignore文件
这个文件可以方便库管理时忽略一些我们不想让加入库更改的文件减少库的冗余。比如c语言生成的.o文件,打印的日志文件,编译出的一些临时文件,这些我们都不需要把他们加入到我们的库里。这个文件我们可以在我们的库中创建。
这里要注意一个小知识点:如果一个文件已经先于.gitignore在我们的库中。那么他是不会被忽略的。我们可以用 git rm --cached <filename>+git add+git commit!并且git仓库默认不会追踪我们创建的空文件夹!
github中其实已经有很多各种语言项目使用的.gitignore模板,可以直接使用!
关于匹配规则:
9.github的简单使用
github是一个git的网络托管平台。我们有两种方式连接到我们的github远程仓库,一种是https,一种是ssh。比较推荐的是ssh!使用ssh需要把自己的本地公钥(.pub)上传到github(类似于开了一扇门,但是同时看到这扇门才知道你进去的是github的服务器的房子),然后在本地配置私钥(如果第一次生成且为默认名称id_rsa,就不用配置了)。然后就可以开心的使用gitclone命令了!
那么如何在远程仓库关联本地仓库呢?我们只需要在远程建立一个空仓库,github就会自动给我们一些提示来完成这个操作!完成之后可以使用git remote -v 来查看远程仓库和本地仓库的映射关系。这里也给出了几条指令:
要注意几点:首先是如果本地仓库为空,还没有修改,会发现git branch没有分支,是没办法直接push的。 例如:git push -u Remote_Try main 。这里为了避免登录耗时,可以直接用ssh复制的连接替换<远程仓库名>。
10.git的分支操作
分支操作的应用场景很广泛,试想一下,有一个已经在运行的大型软件,现在有不同的部门要在这个软件的基础上开发模块,在这期间还要保证现有软件的正常运行,这时候就需要分支。
主要有以下操作:
另外有一个在终端的可视化分支展示:(有些抽象)
bash
git log --graph --oneline --decorate --all
但是这里可以用alias命令来做一个映射:
bash
alias graph="git log --graph --oneline --decorate --all"
这样我们就可以直接用graph代替这一坨指令了!
在分支合并的时候如果有冲突,就需要我们手动解决冲突,推荐的方法是使用vscode等ide会比较直观。可以使用git diff查看冲突的地方,或者直接vim查看文件,手动修改之后,使用git add 然后commit!
还有一个类似于git merge的命令:git rebase。这个命令和git merge 的区别就是这个命令会像合并链表一样进行合并,类似于这样:
有点就是比较清晰,缺点就是会改变当前分支branch out 的节点。