git本地基本命令操作介绍及注意事项(以下出现的命令可用git bash 或开发工具带的命令操作界面):
安装本地git客户端,全部默认配置即可
通过git bash生成公私钥
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
如无其他特殊要求,默认回车就好,无需设置密码及路径
cat ~/.ssh/id_rsa.pub
将得到的公钥复制到gitlab上个人的Settings中的SSH Keys即可
选择本地一个路径作为git本地仓库及代码存放位置
git config --global user.name "lc"
git config --global user.email "lc@163.com"
确定本机全局提交者
git init
初始化该路径环境,创建.git文件夹,该命令应在该路径下执行
git remote add origin git@192.168.1.12:lc/test.git
远程连接gitlab上的项目所在目录
git clone -b 170907 git@192.168.1.12:dcsp/smau.git
远程下载分支
git push -u origin --all
-u 等价于 --set-upstream,作用为在gitlab上建立与本地映射关系,将上传本地所有分支!将来在本分支提交时即可简略为git pull/push
git log --pretty=oneline
显示已执行的commit操作,--pretty=oneline即显示简略信息,HEAD指向的为当前正使用的版本;git log --graph 可以看到分支合并图
git checkout -b branch1
在本地建立分支branch1,checkout即为切换到,-b为新建分支
git branch
查看本地版本库,带*即为目前正使用的版本,-a查看所有分支包括远程分支,-vv这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有(远程仓库仅指已缓存的,获取实时需要先执行git fetch -all)
git add .
将改动保存至本地缓存区,.可以替换为具体路径文件
git diff
可查看工作区和版本库中的的差异,若工作区的已add到缓存区,则不比较
git commit -m "分支"
将改动提交至本地版本库,-m即版本描述
git diff --cached
可查看本地缓存区和本地版本库的差异,git diff HEAD 可查看版本库与工作区及缓存区的差异
git status
可查看当前版本的状态,包含本地与服务器版本的差异及本地缓存区是否有内容
git reset --hard <版本号>
可切换本地不同的版本库(通过commit提交过的版本),历史版本号可通过git log或git reflog查看,--hard即切换的同时清空工作区和缓冲区内容;--soft即保留工作区未add内容,并且将切换前版本与切换后版本的差异放入缓冲区;--mixed即将切换前与切换后的差异放入工作区,待重新add和commit,即可用于将缓存区的变化回退到工作区
git checkout -- <file>
可撤销工作区修改,若已add则恢复至add
git rm <file>
从版本库中删除文件,若这文件确实不需要才使用;若误删工作区文件,可通过git checkout -- <file>还原为最后提交版本的文件
git merge <name>
合并某分支到当前分支,git branch 可查看当前分支;git merge --no-ff -m "合并指定分支到当前分支并保留指定分支记录" <branch>
git branch -d <file>
删除指定分支;-D <file> 强制删除分支,不管是否合并到主分支
git remote -v
查看远程仓库的情况,-v即显示详细信息,若没有推送权限,将看不到push的地址
git push origin <file>
上传本地当前分支到远程origin库
git checkout -b dev origin/dev
创建远程分支并本地切换到该分支,dev可换成分支名
git branch --set-upstream dev origin/dev
建立本地与远程分支之间的联系
git fetch origin
同步远程版本库
常用命令集
SET LESSCHARSET=utf-8
解决windows系统中用git log命令中出现中文乱码问题
git config --global alias.st status
给命令配置别名,--global即当前用户生效,上述及git st = git status
git-scm.com
git官网,可查阅详细资料
场景应用:
场景1、主分支有BUG,但是手头的dev分支正在开发新功能,且功能尚未完成无法commit
处理方式:
1:在 dev 下正常开发中,说有1个bug要解决,首先我需要把dev分支封存stash
2:在master下新建一个issue-101分支,解决bug,成功后
3:在master下合并issue-101
4:在 dev 下合并master, 这样才同步了里面的bug解决方案
5:解开dev封印stash pop,系统自动合并 & 提示有冲突,因为封存前dev写了东西,此时去文件里手动改冲突
6:继续开发dev,最后add,commit
7:在master下合并最后完成的dev
操作如下:
1: $ git stash
2: $ git checkout master
$ git checkout -b issue-101
//去文件里修bug
$ git add README.md
$ git commit -m "fix-issue-101"
3: $ git checkout master
$ git merge --no-ff -m "m-merge-issue-101" issue-101
$ git branch -d issue-101
4: $ git checkout dev
$ git merge --no-ff -m "dev-merge-m" master
5: $ git stash pop
//提示冲突,去文件手动改正
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
6: //继续开发 ... ... ,完成后一并提交
$ git add README.md
$ git commit -m "fixconflict & append something"
7: $ git checkout master
$ git merge --no-ff -m "m-merge-dev" dev
$ git branch -d dev
场景2、多人协同工作,在dev分支上进行开发,A修改了test.txt并push,B修改了test.txt准备push提示冲突
处理方式:
1、git push origin branch-name推送自己的修改;
2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull origin branch-name试图合并;
3、如果合并有冲突,则解决冲突,并在本地提交;
4、没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
5、如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000