Git 日常命令
2017-12-31 本文已影响37人
风之化身呀
1、基本命令
- git add .
- git commit -m "first commit "
- git push 远程仓库 本地分支:远程分支
- git pull 远程仓库 远程分支:本地分支
- git checkout -b "name" origin/release 创建并切换分支(以远端origin为基准)
- git branch 列出本地所有分支
- git branch -r 列出远端所有分支
- git push origin --delete test 删除远程分支
- git branch -d test 删除本地分支
- git branch -D test 如果有未提交的文件,用它
2、进阶命令
- git show // 显示当前分支的提交历史
- git log // 显示所有分支的提交历史
- git commit --amend //该命令会触发vim编辑器,用于编辑提交信息(此命令只适合本地commit尚未提交到远端,否则会有冲突)
- git checkout -- filename // 取消工作区修改,即没有git add .过的文件
- git reset HEAD -- filename // 取消暂存区,即git add .过但没commit过的文件,注意‘--’前后有空格
- git reset HEAD~n // 撤销本地仓库当前HEAD之前n个版本的提交,暂存区会被干掉,工作区保留
- git reset --hard HEAD~n //撤销当前HEAD之前n个版本的提交,暂存区和工作区都会被干掉
- git merge branch-name //在当前分支合并branch-name分支
- git rebase master // 在当前分支rebase master分支
- git diff // 工作区和暂存区对比
- git diff --staged // 暂存区和HEAD对比
- git stash //切换分支前将工作区和暂存区(未git add 和 git add .的文件)放置临时存储区,否则会带到其他分支去
- git stash pop // 取出临时存储区
- git stash drop // 扔掉临时存储区
- git stash --keep-index // 存储没有git add过的文件,用于不想提交某个文件
- git cherry-pick commitID //在当前分支上提取别的分支的某次提交
- git reflog 查看HEAD指针位置,git reset HEAD@{number} 回到某次提交
- git tag -a "v2.8.0" -m "导入" 添加tag
- git push origin v2.8.0 推送tag
- git pull --rebase 避免多余的 commit 信息
- git merge --squash branch_name 重新提交,一般用于往主分支上合并代码,避免将功能分支的提交记录合并到主分支上,方便回退
- git bisect start HEAD ffnc // git 调试 git bisect bad/good/reset
3、常见问题
- 切分支时当前分支的修改被带到另一个分支问题
有两种情况:1、当前分支新建了文件(原分支没有这个文件),在切分支之前必须commit掉才不会带到另一个分支;
2、当前分支修改了某个文件(原分支有这个文件),在切分支之前有两种选择:1、可以使用stash命令缓存起来,这样不会带到另一个分支,当再切回该分支时,再用stash pop命令恢复缓存的修改,这种方式使用的更多;2、commit掉 - rebase 和 merge 的区别
merge执行一个合并,或者说一个融合。我们希望在当前分支上往前走,所以我们需要融合合并其他分支的工作,从而放弃其他的分支。一般是在master分支上merge其他分支,出现冲突解决即可。
rebase存在的价值是:对一个分支做“变基”操作,这意味着改变这个branch的初始commit。它会在新的base上一个一个地运行这个分支上的所有commits.一般是在其他分支上rebase master分支,然后切回master分支,再做merge操作。 -
怎么解决冲突
首先搞清楚冲突的是哪个文件,其次搞清楚冲突的双方内容的位置,即哪个是本地的,哪个是远程的。见下图:
解决冲突
image.png
4、分支工作流
-
多人协作
多分支
注意:此图代表的是远端分支情况!每次提交代码前请git pull代码,因为可能别人修改过远端branch分支
- 个人工作流程
比如你负责feature1分支的工作,应该首先git clone feature1,然后在本地默认会生成master分支。在本地执行git checkout -b dev 从本地master分支创建并切换到dev分支,当dev分支的功能完成后,切回本地master分支,在master分支上执行git merge dev操作,完成后在master分支上进行提交操作 git push -
分支管理
分支管理
5、可视化工具 sourceTree
用SourceTree轻松Git项目图解
SourceTree 免登录跳过初始设置
SourceTree通过配置SSH来链接GitLab