Git
Git常用命令总结
1 git config
# git查看配置
git config --list
# ================= 全局配置(保存在用户目录下的 ~/.gitconfig 文件中)======================
# 设置全局用户名和邮箱(在 git commit 时记录为提交者信息))
git config --global user.name "reef"
git config --global user.email "[email protected]"
# 设置全局代理(socks5 协议,端口号为 7890)
git config --global http.proxy=socks5://127.0.0.1:7890
git config --global https.proxy=socks5://127.0.0.1:7890
# ================= 当前仓库单独配置(保存在当前仓库中 .git/config 文件中)======================
# 设置仓库专属用户名和邮箱(覆盖全局设置)
git config user.name "reef"
git config user.email "[email protected]"
# 设置当前仓库的代理(仅对该仓库生效)
git config http.proxy=socks5://127.0.0.1:7890
git config https.proxy=socks5://127.0.0.1:7890
2 初始化仓库
# 将当前文件夹初始化为一个 Git 本地仓库
git init
# 将指定文件夹初始化为一个 Git 本地仓库
git init <目录路径>
3 本地仓库的操作
3.1 查看文件状态
# 可以查看分支名(branch)和文件的状态,如已修改(Modified),未跟踪的(untracked),未修改的不会有提示
git status
# 简洁版的git status
# 红色M 代表文件修改了但未加入暂存区
# 绿色M 代表文件修改了并且已加入暂存区
# ?? 代表未跟踪的,
# A 代表文件已被加入到暂存区
git status -s
3.2 未暂存的文件添加到暂存区和解暂存
# 将文件加入暂存区
git add 文件名
# 将暂存区的文件取消暂存
git reset 文件名
3.3 commit(暂存区文件的提交)
# 不带文件名会提交暂存区所有的文件
git commit -m "提交的日志信息"
# 提交全部暂存区文件,并打开一个编辑器,让你写入提交日志('i':插入,'ESC':退出编辑,':wq':保存并退出)
git commit
# 该语句可将不是暂存区的文件直接commit,因为-a就代表提交到了暂存区。两步合为一步了
git commit -a -m "提交的日志信息"
3.4 已commit的文件删除
# 会放在暂存区,在commit之后就删除了。如果直接在文件夹中删除,则不会放在暂存区,要将其删除,就必须先add进暂存区,再commit
git rm 文件名
3.5 将文件添加至忽略列表
自动生成的文件,比如日志文件,class文件就不需要通过git提交,git一般只负责提交源代码。这种情况下,我们可以在工作区中创建一个.gitignore文件(文件名固定,可以在git命令行中用touch .gitignore语句创建)
# 通配符(匹配任意)
*
# 取反。比如!hello.class文件,git就不会忽略掉hello.class文件
!
# 忽略当前目录下的xxx文件
/xxx
# 忽略当前目录下的doc文件夹下的所有
doc/
# 忽略当前目录下的doc文件夹里的所有txt文件
doc/*.txt
# 忽略当前目录下的doc文件里的所有文件夹里的class文件
doc/**/*.class
3.6 查看git操作日志
# 因为日志太多,不会一次性全部显示,按回车会显示下面的,按Q会退出。
git log
4. 远程仓库的操作
4.1 remote
# 可以查看到本地关联的的远程仓库的别名(粗略查看)
git remote
# 显示远程仓库地址(详细点)
git remote -v
# 可查看更多信息(更详细)
git remote show 远程仓库的别名
# 添加(add)远程仓库(一个本地仓库可以添加多个远程仓库)
git remote add 仓库别名 远程仓库的url
# 删除本地仓库中配置的某个远程仓库别名及其对应的 URL(该命令不会影响到真正的远程仓库)
git remote rm 远程仓库的别名
4.2 clone
# 克隆远程仓库到此命令行文件夹下面
git clone 远程仓库的url
4.3 fetch & pull
# 从远程仓库获取最新版本带本地仓库,不会合并(merge)。如果省略这两个参数,即别名为origin,分支为matser
git fetch 仓库别名 远程仓库的branchName
# 合并到本地仓库
git merge origin/master
# 从远程仓库获取最新版本带本地仓库,会合并(merge)。如果省略这两个参数,即别名为origin,分支为matser
git pull 仓库别名 远程仓库的branchName
# 用于合并本地和远程仓库之间没有共同历史的分支内容。(强制合并)
git pull 仓库别名 远程仓库的branchName --allow-unrelated-histories
5 Git分支操作
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地和远程的分支
git branch -a
# 查看所有本地分支,并可查看是否和远程分支建立映射关系
git branch -v
# 在本仓库中新建一个分支(在正在使用的分支下创建新的分支,新的分支将会复制正在使用的分支的所有内容进行初始化)
git branch 新分支名
# 切换到指定的分支下,前面会有*提示
git checkout 已存在的分支名
# 本地仓库分支推送到远程仓库
git push 仓库别名(shortname) 本地仓库的分支名(branchName)
# 将指定的分支名的分支文件合并到正在使用的分支里(branchName -> 正在使用的分支)
git merge 分支名(branchName)
# 根据分支名删除分支,未push的不能删除
git branch -d 分支名
# 根据分支名强力删除分支,未push的也能删除
git branch -D 分支名
# 删除远程仓库中的分支
git push 远程仓库的别名 -d 分支名
# oldName是当前分支名,newName是想改成的名
git branch -m oldName newName
# 本地更新远程仓库分支
git remote update origin --prune
# =========分支追踪(名字不同也可以)============
# 在本地新建分支local-branchName,并和对应的远程分支remote-branchName做映射,最后再checkout并pull
git checkout -b local-branchName origin/remote-branchName
# 将本地分支local-branchName分支追踪远程分支origin/remote-branchName(建立映射关系)
git branch --set-upstream local-branchName origin/remote-branchName
# 将当前分支跟踪远程分支origin/remote-branchName
git branch -u origin/remote-branchName
6 Git标签操作
标签指的是某个分支的某个特定时间点的状态,记录了截止到当前时间的当前分支的全部内容。根据标签,我们可以很方便的切回到标签标记时的状态
# 创建一个新标签
git tag 新的标签名
# 列出所有标签
git tag
# 查看tag的信息
git show 标签名
# 将指定的标签推送至远程仓库
git push 仓库别名 标签名
# 新建一个分支,根据标签名指向指定的标签
git checkout -b 新的分支名 标签名
# 删除本地仓库中指定的标签
git tag -d 标签名
# 删除远程仓库中指定的标签
git push origin :refs/tags/标签名
7 SSH(secure shell)认证
# 生成 SSH 密钥对的命令(由公钥和私钥组成,常用语SSH的连接和认证)
ssh-keygen -t rsa
上诉命令会生成两个文件,将公钥放在git远程仓库的ssh key里接可以使用ssh操作远程仓库了
- ~/.ssh/id_rsa:私钥,用于客户端身份认证,需保密,放在本地
- ~/.ssh/id_rsa.pub:公钥,可放在远程服务器上