网上的一个图:
1. git fetch
将远程库的代码在本地仓库中更新,注意:本地工作空间并不会有变化,仅仅是origin(默认)主机对应的远程库在本地更新 一般是后面接 主机名 或者 主机名 分支名,例如 `git fetch origin` 或者`git fetch origin master`
- git pull 相当于是 git fetch+git merge
- git pull --rebase 相当于是 git fetch + git rebase
2. git merge 和 git rebase的差别。
简单对比git pull和git pull --rebase的使用 - 散尽浮华 - 博客园 帮助参考
- git merge --no-ff -m "merge with no-ff" dev 普通合并模式,会创建一个新的commit id。
3. git仓库迁移,两个仓库之间的数据转移,保留log
git clone xxxxxx -b master #xxxxxx为仓库1
git remote add log yyyyyyyy #yyyyyyyy为仓库2
git fetch log
git checkout -b log log/master
git checkout master
git rebase log
git push origin master
4.git branch --set-upstream-to <branch-name> origin/<branch-name>
git pull失败 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令`git branch --set-upstream-to <branch-name> origin/<branch-name>`。
5. git reset --hard HEAD^
回退到上一个版本,本地工作空间会变化 或者
- git reset --hard 1094a 回退到某个指定的commit节点
6. git reflog
记录每一次git命令
7. git diff HEAD <file>
可以查看工作区和版本库里面最新版本的区别,在git add 之后还可以查看文件做了什么修改
8. git checkout -- filename
命令`git checkout -- readme.txt`意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况: 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git commit或git add时的状态。
9. git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区
10. git log --graph
可以看到分支合并图
11. git stash
可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 `git stash list` 查看stash列表 `git stash apply` 恢复内容,不过恢复后,stash内容并不删除,你需要用git stash drop来删除 `git stash pop` 恢复的同时把stash内容也删了
12. git checkout -b dev origin/dev
创建远程origin的dev分支到本地(本地创建dev分支,内容同origin/dev )
13. git rev-parse --short HEAD ,git rev-parse HEAD
git rev-parse --short HEAD 获取最近一次提交的commit id (短id)
git rev-parse HEAD 获取最近一次提交的commit id (长id)
14. git branch --contains <commmit_id>
通过某次commit id获取到对应的分支
15.git blame filename
查看文件每一行最后一次提交的commitid
16.git submodule foreach <command>
对submodule中每个子repo进行command操作,例如:git submodule foreach git reset tag_v0.1 --hard
17.git clean
从工作目录中删除所有没有tracked过的文件
git clean -fd 删除没有被tracked的文件和文件夹
18. git clone --recursive
递归克隆,递归克隆项目下面的所有git项目,(对于submodule可以适用)
19. git log --pretty=oneline b5fb9ec462680f9a39e87a06fcaa4c7eac590c94...2b187870a162a8c4b700e3eb90f7cfb401ad5c6f
获取两个commit之间的commit信息
20. 从其他分支merge指定文件到当前分支
git checkout branch -- filename