常用的Linux命令
1.cd 改变目录
2.cd… 回退到上一个目录
3.pwd 显示当前所在的目录路径
4.ls 列出当年前目录中的所有文件
5.touch 新建一个文件
6.rm 删除一个文件
7.mkdir 新建一个文件夹
8.rm -r 删除一个文件夹
rm -rf / 切勿在Linux中尝试,会删除电脑中全部文件
9.mv A B 移动文件a到b中
10.clear 清屏
11.history 显示历史记录
12.help 帮助
13.exit 退出
- git config -l 查看配置
git config --system --list 过滤条件 系统的配置
git config --global --list 自己的配置
git config --global user.name “luyufei” //名称
git config --global user.email 123456@qq.com//邮箱
- Workspace:工作区,就是平时存放项目代码的地方
- Index/Stage:暂存区,用于临时存放你的改动,事实上它知识一个文件,保存即将提交到文件列表信息
- Repository:本地仓库区,就是安全存放数据的位置,这里有所有版本的数据,其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。
本地仓库:本地仓库上存放所有相关的文件,具体可分为工作区、暂存区和仓库区,工作区即项目文件夹下不包含.git
文件夹的所有文件,暂存区和仓库区则在.git
文件夹下
Git项目搭建
方法一:创建全新的仓库,执行后可以看到多出一个.git目录,关于版本等的所有信息都在这个目录里面
$ git init
方法二:克隆远程仓库
#克隆一个项目和他的整个代码历史(版本信息)
$ git clone[url]
- 项目名字
- public
- 添加README file
- 添加一个Android项目类型的.gitignore
- 使用Apache License 2.0 来作为开源协议
打开AS中该项目的终端界面
git clone http://...
之后打开文件夹会发现该文件夹下出现了一个同名的文件夹,里面有在git中生成的文件:.gitignore README.md LICENSE以及 .git文件夹。
现在我们需要将这个目录中的文件全部复制粘贴到上一层目录中,这样就能将整个工程目录添加到版本控制中去了。上一层目录中也有一个gitignore 文件,我们直接将其覆盖即可,复制完之后可以将同名文件夹删除掉。
这样就欧克了
提交三步法
git add . //千万注意空格 将所有文件添加到版本控制中
git commit -m "First commit"//在本地执行提交操作
git push origin main//将提交的内容同步到远程版本库
补充:
git commit -amend # 用于修改最近一次的提交,这个命令会打开一个文本编辑器,让你修改提交的消息。
git log # commit就像一个快照,把我们每一次提交都保存了起来,我们可以通过git log查看这些记录
使用了git log命令后会出现上图,有两次commit 会显示每次的author和date还有message,黄色的一大串就是commit id,也就是版本号,在git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD ^ ^,往上100个版本可以写100个 ^ ,也可以写成 HEAD~100。
文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制,通过 git add. 状态变为staged
- Unmodify :文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去除,如果它被修改,则变为Modified,如果使用 git rm 移出版本库,则成为 Untracked 文件
- Modified:文件已修改,但没有进行其他的操作,可以通过 git add. 进入暂存Staged状态,也可使用git checkout丢弃修改,返回到unmodify状态
- Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodify状态。
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。在目录下建立“.gitignore"文件,此文件有如下规则:
-
#表示注释
-
可以使用Linux通配符。例如:星号*代表任意多个字符,问号?代表一个字符,方括号[abc]代表可选字符范围,大括号{string1,string2}代表可选的字符串等
-
如果名称的最前面有一个感叹号!,表示例外规则
-
如果名称的最前面是一个路径分隔符/,表示要忽略的文件在此目录下
-
如果名称的最后面是一个路径分隔符/,表示要忽略是此目录下该名称的子目录
*.txt #忽略所有.txt结尾的文件
build/ #忽略build目录下的所有文件
-
.idea目录下的.gitignore文件:
- 用于指定与项目开发环境相关的文件和目录,这些文件和目录不应该被Git跟踪。
- .idea目录通常包含IDE(集成开发环境)生成的配置文件和其他与项目开发环境相关的文件。这些文件通常是本地开发环境特有的,不应该与其他开发人员共享或通过版本控制系统进行跟踪。
- 通过在.idea目录下的.gitignore文件中指定要忽略的文件和目录,可以确保这些与项目开发环境相关的文件不会被Git提交到代码仓库中。
-
根目录下的.gitignore文件:
- 这个文件位于项目的根目录下,用于指定整个项目中应该被Git忽略的文件和目录。
- 根目录下的.gitignore文件通常包含与项目代码和构建输出相关的文件和目录,这些文件和目录不应该被Git跟踪。例如,编译生成的中间文件、构建输出、日志文件等。
- 通过在根目录下的.gitignore文件中指定要忽略的文件和目录,可以确保整个项目的构建和开发过程中生成的临时文件和输出不会被Git提交到代码仓库中。
总结来说,.idea目录下的.gitignore文件和根目录下的.gitignore文件在功能上是相似的,但应用范围和上下文有所不同。前者主要用于指定与项目开发环境相关的文件和目录的忽略规则,后者主要用于指定整个项目中应该被Git忽略的文件和目录的忽略规则。
基本操作
创建版本库
git init #将本地文件夹变为一个git仓库
git clone <url> #将远程仓库克隆到本地
提交与修改
add commit push pull ...
git status #查看工作区状态,显示有变更的文件
git diff #比较文件的不同,即暂存区和工作区的差异
远程操作
git fetch #从远程获取代码库,但不进行合并
git pull # 从远程获取代码并合并
git remote add origin <url> # 将远程仓库与本地仓库关联起来
git remote -v # 查看远程库信息
撤销与回退操作
撤销操作:当修改了工作区/暂存区的文件,但是还没有commit时,想要撤销之前的操作:
# 场景1: 当你改乱了工作区某个文件的内容,但是还没有add到暂存区
git checkout <file> # 撤销工作区的某个文件到和暂存区一样的状态
# 场景2:当你改乱了工作区某个文件的内容,并且已经add到了暂存区
git reset HEAD <file> # 第一步:将暂存区的文件修改撤销掉
git checkout <file> # 第二部:将工作区的文件修改撤销掉
# 场景3:改乱了很多文件,想要回到最新一次提交时的状态
git reset --hard HEAD # 撤销工作区中所有未提交文件的修改内容
回退操作:已经进行了commit操作,需要回退到之前的版本
git reset --hard HEAD^ #回退到上次提交的状态
git reset --hard HEAD~n #回退到n个版本前的状态
git reset --hard HEAD commitid #回退到某一个commit状态 状态为id
git reset --soft HEAD commitid #回退到某一个commit状态 状态为id,并且保留暂存区的内容
git reset --mixed HEAD commitid #回退到某一个commit状态 状态为id,并且保留工作区的内容
关于reset三种模式的说明**
Git分支管理
具体有两种应用场景:
1.多人协作:每个人都基于主分支创建一个自己的分支,在分支上进行开发,然后再不断地将写好的代码合并到主分支
2.自己修复bug/增加feature:创建一个bug分支或者feature分支,写好代码后合并到自己的分支,然后删除bug/feature分支
git branch <name> # 创建分支
git checkout <name> # 切换到某个分支
git checkout -b <name> # 创建并切换到某个分支,相当于同时执行了上面两个命令
git merge <name> # 合并某个分支到当前分支中
git branch -a # 查看所有分支
git branch -d <name> # 删除分支
Git多人协作
多人协作在一个分支,可能会遇到冲突