本文主要摘录于:https://github.com/renyuns/learngit
方便我自己查找和使用,建议大家直接阅读 原文。
待补充:https://blog.yanqingshan.com/52.html
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| git status
git diff
git add 文件名
git add -A
git diff HEAD
git commit -m "修改内容说明"
git commit --amend
git push origin main (初次用 git push -u origin main)
git log
git clone 地址
git pull
git branch dev
git switch dev
git branch -d dev
git merge dev
|
一、Git 和 SVN 的区别
|
类型 |
描述 |
Git |
分布式 |
本地有镜像,无网络时也可以提交到本地镜像,待到有网络时再push到服务器 |
SVN |
集中式 |
无网络不可以提交, 和 Git 的主要区别是历史版本维护的位置 |
二、相关名词理解
工作区 (Working Directory): 自己电脑里能看到的目录
版本库 (Repository): 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库
Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有 Git 为我们自动创建的第一个分支 main,以及指向 main 的一个指针叫 HEAD
三、安装
Git 下载地址 (Linux/Unix, Mac, Windows 等相关平台)
注意: 以下所有命令都在 Git Bash 中运行,不是 cmd, 拷贝命令的时候不用复制前面的 $ 符号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
git config --global user.name "Your Name" // “ ”引号不包含 git config --global user.email "youremail@example.com"
git config user.name "Your Name" git config user.email "youremail@example.com"
git config --global user.name 查看用户名 git config --global user.email 查看邮箱地址
git config user.name 查看用户名 git config user.email 查看邮箱地址
git config --global color.ui auto
git config --list --show-origin
|
四、相关命令
1 2 3 4 5 6 7 8 9 10
| $ cat <file> $ cd ~
(所有命令都在 Git Bash 中运行) $ git 查看 git 的相关命令 (git --help) $ git --version 查看 git 的版本 $ git config 查看 git config 的相关命令 $ git pull origin develop 从远程(origin) 的 develop 分支拉取代码
|
1. 初始化本地仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 注: 下面所有的命令使用的时候不用拷贝最前面的 $ 符号
$ cd d: $ mkdir learngit $ cd learngit $ pwd
$ git init 把当前目录初始化为 git 仓库 $ ls -ah 查看当前目录下的文件,包含隐藏文件 (不带 -ah 看不了隐藏文件)
注意: 为避免遇到各种奇怪的问题,确保目录名 (包括父目录) 不含中文
|
2. 添加文件到仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git add <file> 如: git add readme.txt git commit -m "description" 如: git commit -m "add readme.txt"
注意: 可以多次 add 不同的文件,commit可以一次提交多个文件
git commit --amend
|
提交所有变化的命令对比:
1 2 3 4 5
| git add -A git add -u git add .
|
3. 查看仓库目前状态 (项目是否有修改、添加、未追踪的文件等)
4. 查看修改内容,查看文件不同 (difference)
1 2 3 4 5 6
| $ git diff //查看工作区(work dict)和暂存区(stage)的区别 $ git diff <file> //如: git diff readme.txt 表示查看 readme.txt 修改了什么,有什么不同 $ git diff --cached //查看暂存区(stage)和分支(main)的区别 $ git diff HEAD -- <file> //查看工作区和版本库里面最新版本的区别
|
5. 查看提交日志
1 2 3 4 5 6 7 8 9 10 11 12
| $ git log $ git log --oneline $ git log --pretty=oneline $ git log --graph --pretty=format:'%h -%d %s (%cr)' --abbrev-commit -- $ git log --graph --pretty=oneline --abbrev-commit
|
6. 查看命令历史 (用于版本切换)
7. 版本回退
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ git reset --hard HEAD^ $ git reset --hard <commit_id>
git push -f -u origin main
|
8. 撤销修改
- 丢弃工作区 (Working Directory) 的修改
1 2 3 4 5
| $ git restore <file> (建议使用) (如: git restore readme.txt) $ git checkout -- <file>
|
1 2 3 4 5 6 7
|
$ git restore --staged <file>
$ git restore <file>
|
- 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git restore <file>
。
- 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git restore --staged <file>
,就回到了场景1,第二步按场景1操作。
- 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考 版本回退 一节,不过前提是没有推送到远程库。
9. 删除文件
1 2 3 4 5 6 7
| $ git rm <file>
- rm <file> - git add <file
|
10. 删除已提交的文件夹
在 GitHub 上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决
1 2 3 4 5 6 7 8
| $ git pull origin main
$ git rm -r --cached .idea $ git commit -m '删除.idea'
$ git push -u origin main
|
五、远程仓库
1 2 3 4 5 6 7
| $ ssh-keygen -t rsa -C "youremail@example.com"
如:ssh-keygen -t rsa -C jiajia@example.com
|
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这两个就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人。
2. 添加 SSH Key
登录 GitHub,在 Settings 中找到 SSH 设置项中添加新的 SSH Key,设置任意 title,在 Key 文本框里粘贴 id_rsa.pub 文件的内容。
1 2 3 4 5 6 7 8 9
|
$ cd ~/.ssh $ cat id_rsa.pub
$ open ~/.ssh (Mac 下打开存放 Github 生成的 ssh Key 文件夹)
$ pbcopy < ~/.ssh/id_rsa.pub Mac 下拷贝生成的公钥内容
|
3. 关联远程仓库 (先有本地仓库)
1 2 3 4
| $ git remote add origin git@github.com:renyuns/learngit.git
|
4. 推送到远程仓库
详细参见:将本地文件推送到 GitHub 上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $ git remote $ git remote -v $ git remote rm origin $ git push -u origin main $ git push origin main $ git push origin dev
$ git remote add github git@github.com:renyun/learngit1.git
$ git remote add gitee git@gitee.com:renyun/learngit1.git
$ git push github main $ git push gitee main
|
加上了-u参数,Git 不但会把本地的 main 分支内容推送到远程新的 main 分支,还会把本地的 main 分支和远程的 main 分支关联起来
5. 从远程仓库克隆 (先有远程库)
1 2 3 4
| $ git clone git@github.com:renyuns/gitskills.git
|
一般建议先在 Github 上创建远程仓库,然后再克隆到本地使用。
六、分支
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| $ git branch $ git branch dev
$ git switch dev $ git switch -
$ git switch -c dev $ git switch -c dev origin/dev
$ git branch -d dev $ git branch -D dev
$ git merge dev $ git merge --no-ff -m "merge with no-ff" dev
$ git pull 拉取远程分支最新的内容 $ git branch --set-upstream-to=origin/dev dev
$ git log --graph $ git log --graph --pretty=oneline --abbrev-commit
$ git stash $ git stash list $ git stash pop $ git stash apply $ git stash drop $ git stash apply stash@{0} 多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash
$ git cherry-pick <commit>
$ git rebase
|
七、标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$ git tag 查看所有的标签 $ git tag <tagname> 打标签(默认标签是打在最新提交的commit上) 如: git tag v1.0 $ git tag <tagname> <commit_id> 给对应的 commit_id 打标签 $ git tag -a <tagname> -m "标签说明信息" <commit_id> 创建带有说明的标签,用-a指定标签名,-m指定说明文字 $ git tag -d <tagname> 删除一个本地标签 $ git push origin :refs/tags/<tagname>可以删除一个远程标签 $ git show <tagname> 查看标签信息
$ git push origin <tagname> 推送一个本地标签到远程 $ git push origin --tags 一次性推送全部尚未推送到远程的本地标签
$ git tag -d v0.9 $ git push origin :refs/tags/v0.9
|
八、相关工具及网站
- 15 分钟学会 Git
- 廖雪峰的 Git 教程-新手必看
- Git Book
- Git Handbook
- Git 官网
- GitHub-开源协作社区
- Gitee(码云)-国内开源协作社区
- .gitignore 模板
- 自动生成 .gitignore