Git

Git 常用基本操作

Posted on 2020-08-08,7 min read
git 流程

分支

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>
soft

该命令会会同时保存暂存区和工作区内容,并将 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>

和上一条命令的区别在于下图

git merge --no-ff

会保存分支的所有 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>
git tag

记录了对应的 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 合并分支

下一篇: Angular 环境搭建→