文章目录
Git概述
一般工作流程如下:
从远程仓库中克隆 Git 资源作为本地仓库; 从本地仓库中checkout代码然后进行代码修改;
在提交本地仓库前先将代码提交到暂存区;
提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
在需要和团队成员协作开发时,可以将修改代码push到远程仓库
工作目录下的每一个文件都不外乎这两种状态:已跟踪 tracked 或 未跟踪untracked。
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,
它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。
工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。
初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。
在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。
本地仓库命令
- git status 查看文件状态
- git init 初始化
- git add 将文件的修改添加到暂存区
- git commit 将暂存区的文件修改提交到版本库
- git reset 将暂存区的文件取消暂存或切换到指定版本
- git log 查看日志
例如:在git_data文件夹内新建一个文件Studebt.java
第一步先执行git init初始化git版本库,然后执行git add *把Student.java文件纳入了版本控制,所以显示为绿色。
执行完第一张图,再创建hello.java文件而不执行git add命令,则hello.java文件没有被纳入版本控制,会变红。
此时再执行git add * 命令则会把hello.java纳入版本控制。如下图:
git commit -m "aaa"提交命令,-m为注释, 后面引号内容为注释内容
此时如果修改文件中的内容:
执行git status指令后文件会变为modified变红状态
再次添加即可恢复,放到暂存区:
执行git log打印log日志,可以看到commit后面的版本号
使用reset命令可以回到版本号之前的状态
远程仓库命令
前面执行的命令是针对本地仓库进行操作,下面是远程仓库命令操作介绍:
- git clone 从远程仓库克隆
- git remote 查看远程仓库
- git remote add shortname 添加远程仓库
- git push 推送到远程仓库
- git pull 从远程仓库拉取
执行git clone指令后
若要查看已经配置的远程仓库服务器,可以输入git remote 命令,它会列出每一个远程服务器的简写;
若已经克隆了远程仓库,那么至少能看到origin,这是Git克隆的仓库服务器的默认名字。
在刚克隆的文件夹中新建个hello.txt文档,并提交,然后使用push命令将文件推到github上面:
(需注意:在使用git push 命令将本地文件推送至github仓库时,需要进行身份认证,认证通过才可以推送)
打开github,文件存在,表示已经上传上去,其中master表示默认主分支
随意编辑下hello.txt文件
重新将text.txt加入到暂存区,提交,并推到github上面
github远程仓库上面显示内容:
分支操作
在进行版本控制时,使用分支意味着可以把任务从开发主线上分离开来,以免影响开发主线。同一个仓库可以有多个分支,各个分支相互独立;通过git init 命令创建本地仓库时默认会创建一个master分支。
关于分支的相关git命令,具体如下:
- git branch 查看本地所有分支
- git branch -r 查看远程仓库所有分支
- git branch -a 查看本地和远程所有分支
- git branch [name] 创建分支
- git checkout [name] 切换分支
- git push [shortName] [name] 推送至远程仓库分支
- git merge [name] 合并分支
首先演示git branch、git branch -r、git branch -a
创建dev1、dev2分支,checkout命令是切换分支,后面括号里写什么就代表代码在那个分支上。
将dev1分支上传到远程仓库,dev1-->dev1是指本地dev1到远程dev1。
github仓库显示,此时dev2分支还没有上传到仓库,因此仓库里还没有dev2分支
然后给master分支上传了一个新文件;
期间遇到了这个问题:
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
导致文件无法进行git commit操作,解决方法:找到.git下的index.lock,删除即可
index.lock原因分析:
在进行某些比较费时的git操作时自动生成,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个操作。有时强制关闭进行中的git操作,这个文件没有被自动删除,之后你就无法进行其他操作,必须手动删除。
再执行git commit发现上传成功;
将master分支上传到远程仓库
接下来切换到master分支,看看master分支上都有什么文件:
dev1分支上传到仓库,相比master少了test.txt文件
给dev2分支创建mark.txt文件,并将dev2分支上传到远程仓库
将mark.txt文件添加到master分支并上传
此时如果将master分支和dev2分支合并,会发生错误,因为master分支中的mark.txt文件和dev2分支下的mark.txt文件冲突,内容不一样
若master分支中的mark.txt文件和dev2分支下的mark.txt文件内容一样则不会有冲突,能正常合并。
标签操作
Git中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。
大家会使用这个功能来标记发布结点如v1.0、v1.1等
标签常用命令
- git tag 列出已有的标签
- git tag [name] 创建标签
- git push [shortName] [name] 将标签推送至远程仓库
- git checkout -b [branch][name] 检出标签
v1标签下的文件
v2标签下的文件
可以看出两个标签的状态是不一样的
IDEA上执行Git
将我们在前面创建的文件导入idea中,创建两个controller类
第二种方式,点击图中的箭头也可以提交
图中也可以管理远程仓库,填写仓库的路径即可
下图为将idea中的项目推送到远程仓库