git基本操作
文章目录
本地修改
显示工作路径下全部已修改的文件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
2git 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的项目
git克隆自己fork的分支到本地
1
git clone https://github.com/LuvJia/mapbox-gl-js.git
进入仓库,增加源分支地址到项目远程分支列表中。将原来的仓库指定为upstream
1
git remote add upstream https://github.com/Jing-flyloveyin/mapbox-gl-js.git
通过
git remote -v
查看远程分支列表1
git remote -v
fetch源分支的新版本到本地
1
git fetch upstream
切换到本地master分支
1
git checkout master
合并两个版本的代码
1
git merge upstream/master
将合并后的代码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 | git branch 查看本地所有分支 |
fetch vs pull
fetch
将远程主机的最新内容拉倒本地,用户检查了以后决定是否合并到本地分支当中。
git fetch命令:1
2git 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
2git 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 | git config --global user.name "" |
create a new repositary
1 | git clone url |
existing folder or git repository
1 | cd existing_folder |
改写历史
filter-branch
- 从所有提交中删除一个文件
从所有提交中删除project.config.json文件1
2git filter-branch --index-filter "git rm -f --cached --ignore-unmatch project.config.json" HEAD
git push origin master --force #更新到远程分支