git init //产生一个.git的目录,用来记录当前目录所有git相关信息
git status //查看git库当前的状态
git add //添加到暂存区
git commit -m "xxxxxxx" //提交到本地分支并添加提交说明
git log //查看版本记录
git log --graph //查看分支合并图
git reflog //查看命令历史
git reset --hard xxxxxx //切换到某个版本,xxxxx表示版本号hash值
git reset HEAD aaa.txt //把add到暂存区的修改放回工作区
先有本地库,然后新建远程库,然后两个相关联:待补充
git clone git@github.com:chg90/gitStudy.git //先有远程库,在本地克隆
git branch test // 新建一个分支test,来源于目前所在分支
git branch //查看所有分支,带*号的是目前指向的分支
git branch -d test //删除test分支
git branch -D test //强行删除test分支(如果test分支没有被合并过)
git branch -vv 查看本地分支和远程分支关联关系
git checkout -- aaa.txt //1,如果工作区的修改没有add到暂存区,就把aaa.txt恢复到和版本库一样的状态 2,如果工作区的修改已经add到暂存区,就把aaa.txt恢复到最后一次提交到暂存区的状态
git checkout test //切换到test分支上
git checkout -b test // 新建分支test并切换到test分支上,相当于git branch test + git checkout test
git checkout -b 本地分支name 远程分支name // 本地新建分支,并关联到远程分支
git diff abc.txt //查看文件做了哪些改动
git diff xxxxx -- aaa.txt //比较aaa.txt和xxxxx版本的区别
git diff 分支1 分支2 --stat (加上 --stat 是显示文件列表, 默认是文件内容diff)
git diff branch1 branch2 --stat //显示出所有有差异的文件列表
git diff branch1 branch2 具体文件路径 //显示指定文件的详细差异
git diff branch1 branch2 //显示出所有有差异的文件的详细差异
git merge test //把test分支的内容合并到当前所属分支上
git merge --no-ff -m "xxxxxx" test //把test分支合并到当前分支上,并且不使用fastforward模式,并提交一个新的commit
git push --set-upstream origin aaaaa //本地新建的分支,远程没有,push到远程
git stash // 当前工作区的修改存储起来
git stash list//查看当前的存储
git stash pop //取出存储的东西
git remote //查看远程库的信息
git remote -v //查看远程库的详细信息 fetch表示从哪里取,push表示推送到哪里去remote表示源,即git服务器上的库origin表示远程,即本机的库
git checkout -b test origin/test //在新clone一个源的时候,只会下载下来master分支,如果想查看远程所有分支,使用git branch -a,如果想使用master之外的分支,则使用此命令以新建本地test分支并和远程test分支关联起来
git branch --set-upstream-to=origin/test test //把本地的库test和源的origin/test关联起来,命令行中origin/test和test的位置对命令执行结果没有影响
tag用于打标签,相当于打上版本号,并且随时可以调出该版本,类似于迅速定位某一个commit,但tag比较简单易读。标签也分为本地标签和远程标签,也都可以删除。
git tag //列出所有标签
git tag tagName //新建tag
git tag -a tagName -m "my tag"//创建tag和备注
git push origin tagName //推送tag到远程
git tag -d tagName //本地删除tag
git push origin :xxxx/tags/tagName //远程删除
rebase命令可以对某一段线性提交历史进行编辑、删除、复制、粘贴
fork:#从一个开源项目fork一份代码并贡献代码
1,页面上点击fork到自己的远程库
2,找到自己的远程仓库地址,clone到本地
git clone --recurse-submodules git@git.server.gingkoo:huan.cao/penta.git
3,更新自己的代码,与原项目保持一致
git remote add upstream git@git.server.gingkoo:pentagram/penta.git
4,从原项目取最新的代码合并到自己本低master分支
git pull upstream
5,每次写代码之前,或者代码提交前,都应该从原项目取最新代码,防止冲突
git pull upstream
6,自己写代码时,最好在分支上开发
1,在gitlab页面上点击add branch,例如test
2,本地git pull 取到最新branch
3,git checkout
从fork的分支更新代码
方式1
git pull --ff-only upstream master && git push
方式2
git fetch upstream
git checkout master
git merge remotes/upstream/master
git push
为不同的路径设置不同的git账号:到需要设置的路径下,
git config user.name "abc"
git config user.email "xx@xx.com"
设置默认的总账号:
git config --global user.name "xxx"
git config --global user.email "xx@xx,com"
git pull时出现冲突 放弃本地修改,使远程库内容强制覆盖本地代码
git fetch --all //只是下载代码到本地,不进行合并操作
git reset --hard origin/master //把HEAD指向最新下载的版本
//git 设置缩写命令
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global https.proxy https://127.0.0.1:19180 //设置代理
git config --global --unset https.proxy //取消代理
gitsubmodule的用法
项目的版本库某些情况下需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码中,而是要独立为一个代码库,那么其他项目要调用公共的函数库,该如何处理呢?分别把公共函数库的文件拷贝到各自的项目中,会造成冗余,丢弃了公共函数库的维护历史,显然不是好的方法。submodule就是解决这个问题的一个方案
在版本库中使用git submodule add命令添加子模组
git submodule add /path/to/repos/libA.git
此时版本库工作区的目录结构在根目录下多了一个.gitmodules文件。
看看.gitmodules的内容:
[submodule "lib/lib_a"]
path = lib/lib_a
url = /path/to/repos/libA.git
提交
$ git commit -m "add modules in lib/lib_a"
$ git push
在提交过程中,发现作为子模组方式添加的版本库实际上并没有添加版本库的内容。实际上只是以gitlink方式[1]添加了一个链接。至于子模组的实际地址,是由文件.gitmodules中指定的。
更新
$ git submodule update
gitsubmodule详细:https://blog.csdn.net/THEGREATHXY/article/details/113880095
转载请注明来源