常用git操作

​ Git操作是开发日常中最基础的,同时也是最重要的开发工具之一,掌握git是一个开发人员的基本素养,下面记录一下在公司里最常用的Git操作

基础型

梦开始的地方:

git clone

down就完事了

最常见的,也是最基础的:

1
2
3
4
git status
git add .
git commit -m "xxx"
git push

这是在个人开发时最常用的三步走命令,git status是用来查看暂时已经更改的文件,git add命令会将改动的文件放入暂存区,git commit会生成一个快照记录,同时会有一个唯一的哈希值来标记这个记录,最后push是将本地分支推送到对应的远程分支(对于开发人员则是本地的feauture分支和远程分支)

每一次开发都是本地新建一个feature分支,随后在自己本地进行开发,开发完成后,在远端建立一个对应的feature分支,开发完成后,推到那个分支上,随后在远端仓库提出合并请求,将远程feature分支与主分支(一般是dev分支)进行合并,然后删掉远程分支,分支相关操作:

1
2
3
git checkout //切换分支(未commit的代码会一起切过去
git branch xx //新建xx分支
git remote -v //查看本地分支与远程仓库的对应

签完到的第一件事一般是更新代码:

1
2
git fetch
git merge

git fetch命令会将远程分支的代码拉取到本地,git merge会把更新的那部分跟本地进行合并,如果拉取之后有冲突会提示让选择用哪边的代码或者是手动解决

有时候想去看看我旁边的老兄提交了多少代码,一般在dev分支上这么查一下

1
git log --author="name"

log会查到远程对应分支(一般查dev)的commit信息

1
git diff

比对命令,可以比对分支或者是commit之前的区别,会显示到具体某一行哪里不同

进阶型

git stash

顾名思义,暂存,这个命令最常见于暂时保存手里还没做完的工作,暂存区和工作区的改动都会存起来

1
2
3
4
git stash list 显示保存的进度列表
git stash drop 丢弃保存的一个进度,如果有多个,默认丢弃最新的
git stash pop 弹出最近的一个进度,顾名思义,出栈,也可以指定弹出某一进度
git stash clear 删除保存的所有进度

git rebase

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
git rebase <远程仓库名>/<远程分支名>
git rebase -i HEAD^n
# Rebase 986e234..84c413a onto 986e234 (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

这个命令上大学的时候从来没用过。。一直到来了公司之后,开始参与公司项目的迭代,才接触到这个命令,简单来说,当自己的某项工作搁置了一段时间,落后远程分支挺多的时候,如果做完了,想把代码推上去,先拉去更新后会有很多的commit,加上自己本地提交的一些commit,直接提交的话远程分支很不整洁,这个时候可以用git rebase命令,把自己做的所有工作整合成一个commit,移到master或者dev分支的最前面,就可以了,但这只能适用于自己的分支,切不可在主干分支上进行这种操作

git revert

1
git revert commitid || HEAD^n

版本重做,用一个新的commit来回滚之前的commit,即丢弃某一commit或者是某些commit,然后HEAD往前推进,生成新的commit

git reset

版本回滚,退到的那个版本之后的commit全部消失,如果已经

1
2
3
4
5
6
git reset commitid || HEAD^N
--soft 回退后a分支修改的代码被保留并标记为add的状态(git status 是绿色的状态)
--mixed 重置索引,但不重置工作树,更改后的文件标记为未提交(add)的状态。默认操作。
--hard 重置索引和工作树,并且a分支修改的所有文件和中间的提交,没提交的代码都被丢弃了。
--merge 和--hard类似,只不过如果在执行reset命令之前你有改动一些文件并且未提交,merge会保留你的这些修改,hard则不会。【注:如果你的这些修改add过或commit过,merge和hard都将删除你的提交】
--keep 和--hard类似,执行reset之前改动文件如果是a分支修改了的,会提示你修改了相同的文件,不能合并。如果不是a分支修改的文件,会移除缓存区。git status还是可以看到保持了这些修改。