一、先创建本地项目的情况
场景:本地已经创建好了项目需要,需要把本地项目保存到远程分支
1、初始化git工程
【默认开始为master分支】
git init
2、配置.gitignore文件
touch .gitignore
vim .gitignore
# 配置完成忽略文件后...
# 需要先提交.gitignore文件,否则配置不能生效
git add .gitignore
git commit -m 'update .gitignore_0'
配置实例:
#忽略任意后缀为.mp4的文件
*.mp4
#忽略任意目录下.idea文件和其中内容
.idea/
忽略任意后缀为.iml的文件
*.iml
#忽略根目录和任意子目录下的target文件夹
target/
忽略文件的配置很重要,因为git一般有项目大小限制,上传时要有效过滤大文件。
查看工作区和暂存区状态
git status
3、把工作区内容提交到暂存区
git add <文件名>
git add . # 提交全部文件
4、把暂存区内容提交到本地仓库
git commit -m '注释'
到此为止,本地的git仓库基本配置完成。
5、创建远端仓库
使用码云或github创建仓库,设置好分支。
6、本地关联远端仓库
git remote add <远端名称> <远端仓库地址>
远端仓库名称默认是origin
,用其他名称也是可以。实际上就是一个映射关系。
查看远程仓库
git remote
7、本地拉取远程库内容
git pull <远端名称> <分支名称>
如果出现错误信息:fatal: refusing to merge unrelated histories…
使用如下命令允许不相关历史进行提交:
git pull <远端名称> <分支名称> --allow-unrelated-histories
拓展:
从远程仓库抓取和拉取还有一种方式
git fetch <remote name> <branch name>
git fetch
是从远程仓库获取最新版本到本地仓库,不会自动merge,因此需要手动合并。
8、检查本地文件和远端文件是否存在冲突
发生冲突的原因
在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户push
,故需要先拉取远程仓库代码,经过合并后才能推送代码。在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。
git status
可以告诉我们冲突的文件,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,之后进行判断保留哪个或者都保留,并删除标记符号。
之后把工作区中内容提交到暂存区,再提交到本地仓库即可。
此时B提交的新版本代码,相比于A又往前了一个版本。
9、本地仓库提交到远端仓库
git push <远端名称> <远端分支>
往后的操作都可以参考如下场景的操作情况…
二、先创建远端仓库的情况
场景:项目组长先在远程创建好仓库,设置好远程分支配置,接下来组员根据各自职责拉取远端仓库,各自在本地创建好自己的分支。这也是大部分的操作情况。
1、拉取远端项目
git clone <远端项目地址>
2、创建本地分支
git branch <分支名称>
查看分支
- 查看本地分支
git branch
- 查看远程分支
git branch -r
- 查看所有分支
git branch -a
2.1、删除分支
- 删除本地分支
git branch -d <分支名称> #删除分支时,需要做各种合并冲突检查,检查失败,删除失败(自我尝试,需要把要删除的分支合并以后才能将其删除)
git branch -D <分支名称> #不做任何合并冲突检查,强制删除
- 删除远程分支
git push origin –d <分支名称> #删除远程分支 (**谨慎操作**)
3、切换分支
在先有分支的基础上创建新的分支,会直接复制先有分支的内容。
git checkout <分支名称>
直接切换的分支的工作区,本地文件也会发生变换为当前分支的情况。
3.1、合并分支
合并<分支名>到当前分支,可能会存在冲突的问题
git merge <分支名>
4、提交修改的代码到本地仓库
git status
git add .
git commit -m '注释'
同之前的操作一样,来提交修改后的代码的本地仓库
5、回退版本
回退版本要求代码没有提交的到远端仓库,那么提交到本地仓库的代码可以回退到任意版本
git reset --hard HEAD^ #返回到上一个版本
git reset --hard <版本号部分信息> #只需要输入一部分就可以让Git去自动寻找
如果想回到未来,但是因为关闭了之前的命令框不能找到未来某一个版本的commit版本号。
Git查看你的每一次命令
git reflog
git reset --hard <版本号部分信息> #只需要输入一部分就可以让Git去自动寻找
6、提交本地仓库到远端仓库
这个操作之后便不能再直接修改远端代码了,只能重新拉取下来再走一遍提交流程。
删除暂存区缓存
git rm -r --cached .
忽略文件:.gitignore
1)以/
开头表示只匹配根目录下文件夹
2)以?
通配单个字符
3)以*
通配多个字符
4)以方括号[]
包含单个字符的匹配列表
5)以叹号!
表示只跟踪某个文件或目录忽略其它文件或目录
.gitignore 配置文件是按行从上到下进行规则匹配的,如果前面的规则匹配的范围更大,则后面的规则将不会生效;
例子:
# 忽略根目录的任何.idea/文件夹和其中的内容
/.idea/
# 忽略根目录和任意子目录下的target文件夹
target/
# 忽略项目中任意后缀为.iml的文件
*.iml
如果已经添加到git中,并在.gitignore中已经配置,那需要再删除已经归档的文件
// 以删除.idea文件夹以及其中内容下为例
git rm --cached --force -r .idea
git commit -m 'removed .idea/*'
git push