1. 工作流程
在多人使用Git进行开发,如果没有一个规范的工作流程,那么就很容易导致提交冲突,或者提交被覆盖等:这里假设主分支是work
(一般不建议在master有很多人有提交权限),自己得分支交myBranch
, 常规工作流如下:
- 提交自己或换存(stash)当前所在分支的修改
git commit -a #或 git stash
- 切换到项目主分支
git checkout work
- 拉取远程其他人最新的修改,一般此时不会产生冲突
git pull
- 切换到自己的工作分支
git checkout myBranch
- 执行rebase(git rebase 和 git merge 的区别,但是应该注意的是应该尽量使用rebase)合并主干的修改,如果此时出现冲突在这时候处理冲突;
git rebase master
- 回到主工作分支
git checkout work
- 合并自己所在工作分支的修改到主分支,因为在自己的分支已经处理过冲突此时不会产生冲突。
git rebase myBranch
- 提交到远程主干
git push
经过上述的处理,在远程主干分支上的历史永远是线性的,每个人在自己的本地分支合并代码并解决冲突,就不会在主干上产生冲突。
2. 常用命令
git 修改用户名
- 使用下列命令修改,表示你这台机器上所有的Git仓库都会使用这个配置
git config --global user.name "lym"
git config --global user.email "lym@163.com"
- 只修改某个仓库 对应Git
git config user.name "lym"
git config user.email "lym@163.com"
git 回滚
git reset --hard *
回退git log记录里的某次提交 ,--hard
表示会将工作区、暂存区、本地仓库的所有提交的文件全都撤销(包括工作区文件,会删除);例如下面的命令:
git reset --hard a23c29ba043334552851f8ebe51202c78fd61506//git 回滚
同时还有 --mixed
意思是:不删除工作空间改动代码,撤销commit和git add 操作,这个一般是默认参数,也就是当我们执行git reset --mixed HEAD^
和git reset HEAD^
效果是一样的。
常用git stash命令
stash 暂存命令一般用于要切换到其他分支前暂存储当前分支的修改,回来后再恢复切换前的工作状态;一般的常用命令有:
git stash //暂存修改
git stash apply//恢复暂存
stash 其他命令参数见下表:
命令 | 解释 |
---|---|
git stash save “save message” | 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别 |
git stash list | 查看stash了哪些存储 |
git stash show | 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1} |
git stash show -p | 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p |
git stash apply | 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} |
git stash pop | 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1} |
git stash drop stash@{$num} | 丢弃stash@{$num}存储,从列表中删除这个存储 |
git stash clear | 删除所有缓存的stash |
查看某个文件的修改记录git show
在自己工作的分支下的目录下,执行下列命令
git log --pretty=oneline 文件名
使用上述的命令可列出文件的所有改动历史,注意命令后面跟的是要查询的文件名,这里着眼于具体的一个文件,而不是git库,如果是库,对于较大项目来说可能就很庞大了;
通过上面命令就能拿到某次修改的哈希值,接下来使用下列命令:
git show 56Kkd98gdjnnksdjksdu84938
使用git show即可显示具体的某次的改动的修改;
git 其他命令
git merge *** 合并某分支到***分支
git branch -d *** 删除***分支
git checkout -b *** 转换到一个分支***如果没有就创建一个新的
git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:
git branch *** //创建一个 *** 分支
git checkout *** //转换到 *** 分支