Git 学习笔记

本文最后更新于:2020-08-18 18:39

最近在廖雪峰的官方网站上学Git管理代码库,在这里做笔记,备忘用

安装Git

1
2
3
4
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
git --version

安装完成后,还需要最后一步设置,输入

1
2
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

创建版本库

初始化一个Git仓库,使用git init命令

添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
    使用命令git commit -m ,完成

  2. 使用命令git commit -m <message>,完成

时光机穿梭

  • 要随时掌握工作区的状态,使用git status命令
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容

版本回退

git log命令查看历史记录

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

使用git reset命令回退版本

  • 回退到上一个版本:git reset --hard HEAD^
  • 退回到指定版本:git reset --hard commit_id

commit_idgit log可以查看

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

撤销修改

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- <file>
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令it reset HEAD <file>,就回到了场景1,第二步按场景1操作
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

删除文件

命令git rm用于删除一个文件,然后git commit -m <message>,完成

如果是删错,用git checkout -- <file>

远程仓库

添加远程库

1
2
git remote add origin <远程仓库地址>
git push -u origin master

第一次推送master分支时,需加上-u参数
以后用git push origin master推送最新修改

从远程库克隆

git clone <远程仓库地址> <克隆到本地时的文件夹名,可留空>

自定义Git

忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件

如:

忽略Windows自动生成的垃圾文件:

1
2
3
4
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

忽略Python编译产生的.pyc、.pyo、dist等文件或目录:

1
2
3
4
5
6
7
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

最后一步就是把.gitignore也提交到Git

配置别名

git st表示git status

1
git config --global alias.st status

撤销修改一节中,我们知道,命令git reset HEAD <fil>可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:

1
git config --global alias.unstage 'reset HEAD'

当你敲入命令:

1
git unstage test.py

实际上Git执行的是:

1
git reset HEAD test.py

配置文件

配置文件放在.git/config文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可

删除所有提交历史记录,成为一个干净的新仓库

1
2
3
4
5
6
git checkout --orphan latest_branch
git add -A
git commit -am "NEW"
git branch -D master
git branch -m master
git push -f origin master

参考文献

git - how to delete all commit history in github? - Stack Overflow
Git教程 - 廖雪峰的官方网站