【配置git基本操作】
$ git congig -l 当前项目下关于git的所有配置
$ git config --system --list # 查看系统config
$ git config --global --list # 查看当前用户(global)配置
【设置全局用户和邮箱*】
$ git config --global user.name "JUJI"
$ git config --global user.email "1581643513@qq.com"
【git工作流程】
git工作区(本地磁盘目录)、暂存区(虚拟仓库—在本地磁盘创建)、远程仓库(码农上的仓库)
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
# 在当前目录新建一个Git代码库
# 在本地进行初始化(建立暂存区)
# 产生.git文件(文件存储当前项目的所有版本信息)
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
【工作区 => 暂存区】
文件的四种状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
查看文件状态
# 查看指定文件状态
$ git status [filename]
# 查看所有文件状态
$ git status
添加文件
# Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区
# 还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
# 添加指定文件到暂存区
$ git add [filename]
# 添加所有文件到暂存区
$ git add *
$ git add .
# 提交暂存区中的内容到本地仓库 -m 提交信息
$ git commit --m "这一次提交的描述"
删除文件
# 直接从暂存区删除文件,工作区则不做出改变
$ git rm --cached <file>
# 通过重写目录树移除add文件,如果已经用add 命令把文件加入stage了,就先需要从stage中撤销
$ git reset HEAD <file>
$ git reset --hard HEAD^ # 退回到上个版本,如果需要退回好多版本就在后面加上^
$ git reset --hard HEAD^^ # 退回两个版本
$ git reset --hard 版本号 # 恢复文件到指定的某一个版本
# 移除所有未跟踪文件
# 一般会加上参数-df,-d表示包含目录,-f表示强制清除。
$ git clean [options]
# 只从stage(暂存)中删除,保留物理文件
$ git rm --cached readme.txt
# 不但从stage(暂存)中删除,同时删除物理文件
$ git rm readme.txt
# 把a.txt改名为b.txt
$ git mv a.txt b.txt
删除文件
查看文件修改后差异
# 查看文件修改后的差异 ---a表示修改之前的文件,+++b表示修改后的文件
$ git diff [files]
# 比较暂存区的文件与之前已经提交过的文件
$ git diff --cached
# 比较repo与工作空间中的文件差异
$ git diff HEAD~n
替换本地改动
# 从暂存区将文件恢复到工作区(恢复到修改文件之前)
# 假如你做错事,你可以使用如下命令替换掉本地改动:
$ git checkout [filename]
日志与历史
# 查看已经提交到暂存区的历史版本
$ git log
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释 *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
【暂存区 => 远程仓库】
# 生成ssh密匙,设置本机绑定SSH公钥,实现免密码登录
$ ssh-keygen -t rsa -C "1581643513@qq.com"
# 查看公钥
$ cat ~/.ssh/id_rsa.pub
# git配置远程地址
$ git remote add origin https://gitee.com/ju_ji/se20_18200135224.git
# git删除远程地址
$ git remote rm origin
# 查看远程仓库地址信息
$ git remote -v
$ git push -u origin master
$ git pull --rebase origin master
$ git push -f origin master # 一般第一次提交使用强制push
# 【注】提交过程中,可能需要你输入用户名,密码
【远程仓库 => 工作区(克隆)】
# 从远程仓库,克隆项目到本地————克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]
$ git clone https://gitee.com/ju_ji/se20_18200135224.git
$ git pull origin master --allow-unrelated-histories # 可以允许不相关历史提,强制合并
$ git pull 从远程仓库同步本地代码(更新)
【git分支】
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
8
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
【正常使用】
$ git add *
$ git commit -m "提交描述"
$ git status
$ git push
【一般流程】
第一次上传
# 一般git流程 # 1.初始化本地git仓库 $ git init # 2.添加文件到本地git仓库 $ git add . # 3.提交到本地git仓库 $ git commit -m "" # 4.添加远程git仓库地址 # git配置远程地址 $ git remote add origin https://gitee.com/ju_ji/se20_18200135224.git # git删除远程地址 $ git remote rm origin # 查看远程仓库地址信息 $ git remote -v # 5.先pull获取git仓库更新本地 $ git pull origin master $ git pull --rebase origin master $ git pull origin master --allow-unrelated-histories # 可以允许不相关历史提,强制合并 # 6.再push本地git仓库更新远程 $ git push -u origin master # 7.结束 # 注意: # 1.如果,第一次新建的git远程仓库,建议强制push; $ git push -f origin master # 2.如果add远程git仓库地址,已经存在,并且不正确,可以remove,再添加;
正常上传
$ git add * $ git commit -m "提交描述" $ git status $ git push
删除文件流程
# 四步走 # 第一步删除本地文件 $ rm 文件名称 $ rm -rf 文件夹名称 # 第二步删除缓存文件 $ git rm 文件名称 $ git rm -rf 文件夹名称 # 第三步提交暂存区中的内容到本地仓库 -m 提交信息 $ git commit --m "这一次提交的描述" # 第四步提交 $ git push
克隆文件
# 同步远程仓库和本地文件 $ git pull origin master # 克隆其他人远程仓库的文件 $ git clone https://gitee.com/zouencen/software_eng.git $ git add [文件名] $ git commit -m "" $ git push