分支
1. git branch <branch name>
在本地创建一个新的分支名为<branch name>
, 此时在远端看不到该分支, 需要将该分支推送到远端。查看自己本地分支: git branch
查看刚才新创建的分支
2.git checkout <branch name>
进行本地分支的切换,切换至上述新建的分支<branch name>
3.git checkout -
切换至上一个分支,命令效果等同于cd -
3.git push --set-upstream origin <branch name>
推送该分支到远端,并建立关联。所谓关联是指后续所有提交到该分支,如git push
, 如果不进行次操作,git 会进行提示
4. git branch -c
该命令等同于上述1.2步,新创建分支同时会进行切换到新分支
5. git branch -r
: git branch
: git branch -a
上述都查看分支, 查看远端分支, 查看本地分支, 查看所有分支,操作者当前所在分支用 * 号标记。
6. git branch -d <branch name>
删除一个本地分支,切换至别的分支,否则删除不了。
7. git push origin --delete <branch name>
删除远端分支
文件修改提交
8. git status
查看当前分支工作区、暂存区的工作状态,
9. git status -sb
以简洁的方式显示工作区文件状态
10. git add <filename>
将该文件加入暂存区
11. git add . || git add -A
将所有的新创建的文件加入暂存区, 执行git add命令的时候,git首先会通过hash函数算出文件名A.java对应的sha-1值, 该值是32位16进值,git 取前两位在.git 目录objects目录下创建一个以后30为文件名的文件。
12. git diff xxx
查看文件的修改
13. git commit -m "<message>" <filename>
提交该文件至本地仓库, 如果提交所有文件可以使用git commit .
命令
14. git commit || git commit -a
提交所有文件修改,并打开vim界面,填写 message , 作用是规范提交的 message,效果等同于arc。 可以参照Angular 团队的规范。修改自己本地提交 message 参照优雅的提交你的 Git Commit Message。
15. git pull
更新远端的代码并与本地进行合并, 如果自己修改了代码, 获取别人时会产生一次无用的 merge
提交记录。
16. git pull --rebase
同样的拉取远端代码,并与本地代码自动合并,但不会产生上述无用的 commit , 让分支节点迭代更加优美、清晰
17. git fetch
拉取远端代码,但不会进行 merge , 需要自己手动执行 git merge <filename>
进行合并
17. git push
将本地代码修改推送至远端
日志查看
18. git log -x
查看最近X的提交日志
19. git log -x --pretty=oneline
去除提交日志里的 date 以及 author, 显示为一行
20. git show --stat
显示最近一次的提交日志,并显示修改的文件
21. git show <commit-id>
查看对应的 commit-id 修改详情, 具体的修改内容查看。
22. git log HEAD~1
HEAD 指针指向的最后一次提交,也可以查看最后一次提交的log
23. git show HEAD~1
查看最近一次的修改内容详情
文件回滚
24. git checkout <filename>
前置条件没有 commit 到本地仓库,撤销filename文件在工作区的修改到最近一次git add 或 git commit时的内容,就是清空当前工作区的修改
25. git reset --mixed <commit-id>
没有 push 到远端之前,回滚到指定 commit-id , mixed 是git默认的回滚方式,会清空暂存区保留工作区。如回滚前有两个 commit-id
回滚后如下图:
文件显示没有被 add 到缓存区,但是保留了该文件, 并将 commit-id 擦除,擦除的 commit-id 可以恢复reflog
26. git reset --soft <commit-id>
该命令会会同时保存暂存区和工作区内容,并将 commit-id 擦除,擦除的 commit-id 可以恢复用reflog
27. git reset --hard <commit-id>
该命令会同时清除工作区和暂存区,并将 commit-id 擦除,擦除的 commit-id 可以恢复reflog
28. git revert <commit-id>
在已经将代码 push 到远端后,回滚时使用该命令,注意指定的是要回滚的 commit-id , 回退结束后任何内容都不会保留。git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
分支合并
29. git merge <branchname>
开始前请切换你的 target 分支 ,执行该命令会将 <source branch> 代码合并。缺点:git 默认是以 fast-forward 方式进行合并,属于“快进方式”,这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit。
30. git merge --no-ff <branch name>
和上一条命令的区别在于下图
会保存分支的所有 commit-id , 并产生一次新的提交
Git Tag
tag 的作用是对某个提交点打上标签,发布版本后打tag,便于以后回滚特定版本。tag 是对某一版本的记录,tag就是一个只读的 branch ,一般为每一个可发布的里程碑版本打一个tag
31. git tag v1.1.0
在本地对当前分支打 tag
32. git push origin --tag
将创建的 tag 提交至远端
33. git tag -d v1.0.0
删除本地tag
34. git push --delete origin v1.0.0
删除远端的 tag
35. git show <tag name>
记录了对应的 commi-id 可以直接用于回滚使用
Git 与 SVN 操作对比
SVN | Git | 说明 |
---|---|---|
svn checkout | git clone | 检出项目 |
svn update | git pull git fetch | 更新 |
svn commit | git commit git push | 提交 |
svn add | git add | 添加 |
svn mv | git mv | 移动 |
svn rm | git rm | 删除 |
svn status | git status | 查看状态 |
svn log | git log | 查看log |
svn diff | git diff | 查看差异 |
svn revert | git checkout git reset git revert | 回滚 、撤销 |
svn copy | git branch | 且分支 |
svn switch | git checkout | 切换分支 |
svn copy | git tag | 创建tag |
svn merge | git merge | 合并分支 |