本地修改

显示工作路径下全部已修改的文件

1
git status

显示与上次提交版本文件的不同

1
git diff

把当前所有修改添加到下次提交中

1
git add .

指定某个文件的修改添加到下次提交当中

1
git add -p file

提交本地的所有修改

1
git commit -a

提交之前已标记的变化

1
git commit

修改上次提交,请勿修改已发布的提交记录

1
git commit --amend

提交历史

从最新提交开始显示所有的提交记录

1
git log

显示指定文件的所有修改

1
git log -p file

谁在什么时间修改了文件的什么内容

1
git blame file

分支与标签

显示所有分支

1
git branch -av

切换当前分支

1
git checkout <branch>

创建新分支,基于当前分支

1
git branch <new-branch>

创建新的可追溯分支,基于远程分支

1
git checkout --track <remote/branch-name>

删除本地分支

1
git branch -d <branch>

给当前分支提交打标签

1
git tag <tag-name>

更新与发布

列出当前配置的远程端

1
git remote -v

显示远程端信息

1
git remote show <remote>

添加新的远程端

1
git remote add <shortname> <url>

下载远程端的所有改动到本地,不会自动合并到当前

1
git fetch <remote>

下载远程端的所有改动到本地,自动核定到当前

1
git pull <remote> <branch>

将本地版本发布到远程端

1
git push <remote> <branch>

删除远程端分支

1
git branch -dr <remote/branch>

发布标签

1
git push --tags

合并与重置

将分支合并到当前

1
git merge <branch>

将当前版本重置到分支中,请勿重置已发布的提交

1
git rebase <branch>

退出重置

1
git rebase --abort

解决冲突后继续重置

1
git rebase --continue

使用配置好的合并工具去解决冲突

1
git mergetool

在编辑器中手动解决冲突后,标记文件为已解决冲突

1
2
git add <resolved-file>
git rm <resolved-file>

撤销

放弃工作目录下的所有修改

1
git reset --hard HEAD

放弃某个文件的所有本地修改

1
git checkout HEAD <file>

重置一个提交,通过创建一个截然不同的新提交

1
git revert <commit>

将HEAD重置到上一次提交的版本并抛弃该版本之后的所有修改

1
git reset --hard <commit>

将HEAD重置到上一次提交的版本并将之后修改标记为未添加到缓冲区的修改

1
git reset <commit>

将HEAD重置到上一次提交的版本并保留未提交的本地修改

1
git reset --keep <commit>

更新fork的项目

  1. git克隆自己fork的分支到本地

    1
    git clone https://github.com/LuvJia/mapbox-gl-js.git
  2. 进入仓库,增加源分支地址到项目远程分支列表中。将原来的仓库指定为upstream

    1
    git remote add upstream https://github.com/Jing-flyloveyin/mapbox-gl-js.git
  3. 通过 git remote -v 查看远程分支列表

    1
    git remote -v
  4. fetch源分支的新版本到本地

    1
    git fetch upstream
  5. 切换到本地master分支

    1
    git checkout master
  6. 合并两个版本的代码

    1
    git merge upstream/master
  7. 将合并后的代码push到远程分支

    1
    git push origin master

远程分支拉到本地

1
git checkout origin/mb-pages -b mb-pages

删除分支

本地分支

1
git branch -D br

远程分支

1
git push origin :br  (origin 后面有空格)

分支的基本操作

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
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git branch -a 查看远程和本地所有分支
git branch brname 新建分支
git branch -d brnam 删除本地分支
git branch -d -r brname 删除远程分支,删除后还需要推送到服务器
git branch origin:brname 删除后推送至服务器
git branch -m oldbr newbr 重命名本地分支
重命名远程分支:
1. 删除远程待修改
2. push本地新分支到远程服务器

-d
--delete:删除
-D
--delete --force的快捷键
-f
--force:强制
-m
--move:移动或重命名
-M
--move --force的快捷键
-r
--remote:远程
-a
--all:所有

fetch vs pull

fetch

将远程主机的最新内容拉倒本地,用户检查了以后决定是否合并到本地分支当中。
git fetch命令:

1
2
git fetch 远程主机名  
将远程某个远程主机的更新全部取回本地

如果只想取回特定分支的更新,可以指定分支名:
git fetch 远程主机名 分支名
最常见的的命令如取回origin主机的master分支

1
git fetch origin master

取回更新后,返回一个FETCH_HEAD,指的是某个branch在服务器上的最新的状态,可以在本地通过它查看刚取回的更新信息。

1
git log -p FETCH_HEAD

返回的信息包括文件名、作者、时间、更新代码(红-删、绿-增)。
可以通过这些信息判断是否产生冲突

pull

将远程主机的最新内容拉下来直接合并到本地。pull = fetch + merge,这样可能会产生冲突,需要手动解决。
git pull过程可以拆分为:

1
2
git fetch origin master  将远程主机的master分支拉取最新内容
git merge FETCH_HEAD 将拉取下来的最新内容合并到当前所在分支中

将远程主机的某个分支的更新取回,并与本地指定的分支合并。

1
git pull 远程主机名 远程分支名:本地分支名

例如,取回origin主机的next分支,与本地的master分支合并。

1
git pull origin next:master

如果远程分支与当前分支合并,则冒号后面的部分可以省略。

1
git pull origin next

git global setup

1
2
git config --global user.name ""
git config --global user.email ""

create a new repositary

1
2
3
4
5
git clone url
cd 项目文件夹
touch README.md
git commit -m "add README"
git push origin master

existing folder or git repository

1
2
3
4
5
6
cd existing_folder
git init
git remote add origin git地址
git add .
git commit
git push -u origin master

改写历史

filter-branch

  1. 从所有提交中删除一个文件

从所有提交中删除project.config.json文件

1
2
git filter-branch --index-filter "git rm -f --cached --ignore-unmatch project.config.json" HEAD
git push origin master --force #更新到远程分支

参考资料

https://www.git-tower.com/blog/git-cheat-sheet-cn