Git Bash-常用命令
Linux相关命令
cd
: 改变目录cd ..
: 上一目录pwd
: 显示当前所在目录ls
/ll
: 列出当前目录中所有文件, 后者更为详细touch
: 新建文件rm
: 删除文件mkdir
: 新建目录rm -r
: 删除文件夹mv
: 移动文件到文件夹clear
: 清屏reset
: 初始化终端history
: 查看历史命令help
: 帮助exit
: 退出#
: 注释
Git配置
- 查看配置:
git config -l
git config --system --list
系统配置保存在git安装目录
git config --global --list
当前用户配置保存在当前用户目录 - 用户与邮箱:
git config --global user.name "khru"
git config --global user.email xx@163.com
基本理论
四个工作区域:
- 工作目录 Working Directory
存放项目代码的地方 - 暂存区 Stage/Index
用于临时存放改动 - 资源库 Repository
安全存放数据的位置,这里面有提交到所有版本的数据。其中HEAD指向最新放入仓库的版本 - git仓库 Remote Directory
git的工作流程:
- 在工作目录中添加、修改文件;
- 将需要进行版本管理的文件放入暂存区域;
- 提交暂存区中的内容到本地仓库;
- 将暂存区域的文件提交到git仓库。
文件状态
- 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 add . 添加所有文件到暂存区
# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 , -m 提交信息
基本操作命令
master : 默认开发分支
origin : 默认远程版本库
Head : 当前所在的分支的最后一次提交
Head^ : Head的父提交
-
创建版本库
git init # 在项目根目录执行以创建一个Git代码库 git clone [url] # 克隆一个项目和它的整个代码历史
-
修改和提交
git status # 查看状态 git diff # 查看变更内容 git add . # 跟踪所有改动过的文件 git add <file> # 跟踪指定的文件 git mv <old> <new> # 文件改名 git rm <file> # 删除文件 git rm --cached <file> # 停止跟踪文件但不删除 git commit -m "commit message" # 提交所有更新过的文件 git commit --amend # 修改最后一次提交
-
查看提交历史
git log # 查看提交历史 git log -p <file> # 查看指定文件的提交历史 git blame <file> # 以列表方式查看指定文件的提交历史
-
撤销
git reset --hard HEAD # 撤消工作目录中所有未提交文件的修改内容 git checkout HEAD <file> # 撤消指定的未提交文件的修改内容 git revert <commit> # 撤消指定的提交
-
分支与标签
git branch # 显示所有本地分支 git checkout <branch/tag> # 切换到指定分支或标签 git branch <new-branch> # 创建新分支 git branch -d <branch> # 删除本地分支 git tag # 列出所有本地标签 git tag <tagname> # 基于最新提交创建标签 git tag -d <tagname> # 删除标签
-
合并与衍合
git merge <branch> # 合并指定分支到当前分支 git rebase <branch> # 衍合指定分支到当前分支
-
远程操作
git remote -v # 查看远程版本库信息 git remote show <remote> # 查看指定远程版本库信息 git remote add <remote> <url> # 添加远程版本库 git fetch <remote> # 从远程库获取代码 git pull <remote> <branch> # 下载代码及快速合并 git push <remote> <branch> # 上传代码及快速合并 git push <remote> :<branch/tag-name> # 删除远程分支或标签 git push --tags # 上传所有标签
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".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-keygen -t ed25519 -C "Gitee SSH Key"
# 读取公钥
cat ~/.ssh/id_ed25519.pub