Git 学习笔记和总结

0. 学习链接

Git教程
Git sheet
Git Community Book 中文版

1. 配置相关

配置分为全局配置和每个仓库的配置。

1.1 全局配置

配置文件路径:$USER_HOME/.gitconfig
查看全局配置:git config --global --list
修改全局配置:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'

让Git显示颜色,会让命令输出看起来更醒目:
git config --global color.ui true

配置常用命令的别名:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

1.2 单个版本仓库配置

配置文件路径:$REPO/.git/config
查看单个仓库的配置:git config --local --list

Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,并将 .gitignore 添加到版本库中,Git就会自动忽略这些文件,示例如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

git add -f App.class:强制添加某个文件到 git 中
git check-ignore -v App.class:查看哪条规则对忽略的文件生效

2. 创建版本库

2.1 创建本地版本仓库

$ mkdir learngit
$ cd learngit
$ git init

2.2 同步远程版本仓库

git clone git@github.com:Ms-Amanda/gitskills.git
将远程库 gitskills 克隆到当前目录下。


3. 版本库操作

3.1 本地版本库管理

本地版本库分为三部分:
工作区(Working Directory)——暂存区(stage 或 index)——版本库(Repository)
对于所有分支而言, 工作区和暂存区是公共的

git add <file>:把工作区的修改,提交到暂存区。
git add -A:将工作区目录下所有变更(新建,修改,删除文件)都提交到暂存区。
git commit -m <message>:把暂存区的修改,保存至本地版本库。
git commit --amend 撤销上一次提交 并将暂存区文件重新提交。
git status:查看实时状态。

git diff:暂存区为空,比较工作区与最后一次 commit;暂存区不为空,比较工作区与暂存区。
git diff --cached git diff --staged:比较暂存区和版本库上一次的 commit。
git diff HEAD -- filename:比较指定文件工作区和最后一次 commit。
git log:查看 commit 记录。

git log --graph --pretty=oneline --abbrev-commit
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --
abbrev-commit

在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^

git reset --hard HEAD^git reset --hard 1094a:退回到倒数第二次 commit,将工作区暂存区重置成倒数第二次的 commit 状态。
git reset --hard HEAD:退回到最后一次 commit,相当于放弃当前所有修改。
git reset --hard commit_id:去到指定版本,可以是之前或者之后的。
git reflog:查看命令历史,以便确定要回到未来的哪个版本。
git reset HEAD -- <file>:拉取最后一次提交到版本库的文件到暂存区 该操作不影响工作区。
git checkout -- <file>:拉取暂存区文件,并将其替换成工作区文件。若暂存区无文件则拉取版本库最后一次提交,删除文件后也可以用此命令恢复。
git rm <file>:删掉工作区和暂存区的对应文件,再运行 git commit 后可以可版本库中删除对应文件。此命令相当于运行 rm <file>git add -u

3.2 远程版本库操作

git remote add origin git@github.com:YOUR_NAME/YOUR_PROJECT.git
git remote add origin git@bitbucket.org:YOUR_NAME/YOUR_PROJECT.git
将本地版本库与远程版本库关联,远程库地址使用 ssh 协议。若远程库地址使得 https 网址,则需要输入用户名密码。需要远程库存在才能关联。

git push -u origin master
推送本地库的 master 分支到远程库, -u 参数表示把origin这个主机设置为默认远程主机,以后用 git push 就可以把分支推送到这个主机上的对应分支,是一种简化写法。

git remotegit remote -v:查看远程库的信息


5. 分支管理

5.1 本地分支管理

git checkout -b <branch name>:创建并切换分支,相当于接下来的两条命令:
git branch <branch name>:创建分支
git checkout <branch name>: 切换分支,对于所有分支而言, 工作区和暂存区是公共的

git branch:查看当前分支
git merge <branch name>:合并指定分支到当前分支,默认为 Fast-forward 模式,也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。
git branch -d <branch name>:删除指定分支
如下图,合并前:

合并前
合并后:
合并后
删除分支后:
删除分支后

git merge --no-ff -m <message> <branch name>:合并时保留分支信息。如下图,又产生了一次 commit ,同时保留了分支信息:
在这里插入图片描述

git stash:隐藏当前的工作区所有变动过的文件到临时区域,并将这些文件恢复到上一次 commit 的状态
git stash save "<message>":隐藏时添加注释
git stash show:显示哪些文件被隐藏并替换,默认为最新一次的 stash
git stash show -p :显示详细的改动信息
git stash list:查看隐藏的工作区记录
git stash pop:恢复工作区,同时删除 stash 中的内容。恢复时会 merge 此分支的最新 commit
git stash apply stash@{0}v:恢复指定的工作区记录,但不删除 stash 中的内容
git stash drop:删除 stash 中的工作区内容
git cherry-pick <commit>:把指定的 commit 的修改“复制”到当前分支,复制前必须保证工作区状态是 clean 的,因此有两种方式:1. 先 cherry-pick,再 stash pop;2. 先 stash pop,再 add 和 commit ,然后再 cherry-pick。
git stash clear:删除所有 stash 中的内容

5.2 远程分支管理

git checkout -b dev origin/dev:创建远程库分支对应的本地分支,需要远程库有此分支存在
git push origin dev:推送本地 dev 分支到远程库
git branch --set-upstream-to=origin/dev dev:将远程库的 dev 与本地的 dev 关联。当本地与远程都有 dev 分支时,使用此命令进行关联。
git pull:拉取远程库的改动到本地,并合并。
当远程库新建了一个 dev 分支后,先执行 git pull 拉取改动到本地,然后就能 git checkout -b dev origin/dev

git rebase:操作可以把本地未push的分叉提交历史整理成直线

git fetch:将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull: 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
如下图所示:
git
详细可参考:git fetch & pull详解


6. 标签操作

git tag <tagname>:对当前分支的最新 commit 打标签
git tag <tagname> <commit_id>:对指定的 commit 打标签
git tag:查看已经打的标签
git show <tagname>:查看某个标签的详细信息
git tag -a <tagname> -m "blablabla...":打标签的同时指定指定标签信息;

git tag -d <tagname>:删除标签
git push origin <tagname>:推送标签到远程库
git push origin --tags:一次性推送所有标签到远程库

# 远程库删除标签分为两步:
git tag -d v0.9 			#本地先删除
git push origin :refs/tags/v0.9 	#远程再删除

7. 搭建 git 服务器

搭建 git 服务器


8. 初始化配置示例

  1. Git 本地初始化
git config --global user.name "YOUR_NAME"
git config --global user.email "YOUR_E-MAIL"
  1. 在远程仓库创建新的 repository
git clone git@GIT_ADDRESS:YOUR_NAME/YOUR_PROJECT.git
cd YOUR_DIRECTORY
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
  1. 将本地文件夹关联到远程仓库,并推送
cd existing_folder
git init
git remote add origin git@GIT_ADDRESS:YOUR_NAME/YOUR_PROJECT.git
git add .
git commit -m "Initial commit"
git push -u origin master
  1. 对已存在的 repository 的处理
cd existing_repo
git remote rename origin old-origin
git remote add origin git@GIT_ADDRESS:YOUR_NAME/YOUR_PROJECT.git
git push -u origin --all
git push -u origin --tags

9. 修订记录

时间修订内容修订人
2019-12-201. 创建Mr_Apple
2020-06-171. 添加 git fetch 相关的内容Mr_Apple
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值