如下gitURL表示项目git目录的url
首先得有账户和密码,用以获得git代码库的权限
git config --global user.name MyName
git config --global user.email MyEmail
name中有空格则需要打双引号,如"hello world"
没有账户密码,也能用,但是就访问不了需要权限的资源了
这个邮箱和名字是由git管理员设置的,可以找管理员申请,申请下来之后用git bash设置
git clone gitURL
把 gitURL的资源下载到本地当前目录
git remote add origin gitURL
本地端建立与远端的关系,origin只是个名字,以后通过origin操作gitURL
接下来就可以通过git remote、git remote -v查看远端资源了
git pull origin develop
origin的develop分支拉去到本地
git pull origin develop:temp
origin的develop分支拉取合并到本地temp分支
clone之后就不用pull其他分支代码,免得代码多份
直接右键git clone后下载下来的文件夹,可以选择git bash,进入命令行,
默认接下来的命令不用带参数,直接操作,除了git checkout以外
git branch
查看分支
git checkout develop
切换分支到develop,直接在develop中提交
git checkout develop后本地两个版本文件内容不一样的文件会被改动
修改分支中的任意文件
或者新增删除文件
git diff
查看修改,带文件名则查看该文件的修改,带commit hashid则查看commit时与当前工作区之间的修改
git show commit_hash
查看当次提交修改了哪些内容
git add .
添加修改,到缓存中,
git reset head
取消add
git checkout filename
取消文件修改,如果已经add,要先git reset head filename
git status
查看添加了哪些修改文件,有new新增的文件,有modify修改的文件
git commit -m '提交日志'
提交add的文件到本地库,并撰写日志
git push
本地库提交到远程库
git commit是将本地修改过的文件提交到本地库中。
git push 是将本地库中的最新信息发送给远程库。
git pull 拉取最新代码,不带参数,默认拉取分支代码到本地,
最好不要带参数,免得代码多份,搞不清楚
git clone是本地没有,从远端下载一个
git pull是本地有了,拉取最新数据
测试服务器有修改,不能pull最新代码测试??
git stash //缓存此次修改,进行其他操作,后续可以把此修改还原回来
git pull //缓存修改后可以更新文件
git stash apply //还原最近一次的stash
git stash list //查看stash列表,
git stash apply stash@{5} 还原前面第五次的修改
git stash 可以形成list 集合。通过git stash list 可以看到list下的每次stash
使用git stash apply @{x} ,可以将编号x的缓存释放出来,但是该缓存还存在于list中
而 git stash apply,会将当前分支的最后一次缓存的内容释放出来,但是刚才的记录还存在list中
而 git stash pop,也会将当前分支的最后一次缓存的内容释放出来,但是刚才的记录不存在list中
本地代码回退到某一历史版本
git stash //保留当前更改,当前版本上做的修改清空
git log //查看有哪些版本
git reset --hard 49f274d//本地回退到该版本,该版本以后的提交全部清空
git reflog //查看历史提交,reset后,看不到当前版之后提交的历史
git reset --hard b9d0fdc//更新到另一个版本
git stash pop //回复保留的更改
新建git项目,提交本地项目到git
git bash
cd到项目根目录
---------------------
git init
git add .
git commmit -m '日志'
git remote add origin http://47.94.184.72/jiangyawen/official-post.git // git上new project的之后会有提示,找到这个
git push //如果失败,会有提示,按提示做git push --set-upstream origin master(提示的就是这个)
分支上多次commit后,合并到develop,默认会显示多条commit记录,影响查看
git merge testbranch --squash
$ git merge testbranch --squash
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
会压缩多条commit为一条,但是执行完之后要再次commit一下
git commit -m 'merge multi commit'
git push
或者用git rebase手动编辑合并多次提交,分两步:1.合并当前分支的提交,2.合并两个分支的代码
当前feature分支
git rebase -i 某次提交的hash值
pick f57075147 commit 1
pick 73daec73a commit 2
pick 20fe55e23 commit 3
用vim编辑器的编辑功能修改为
pick f57075147 commit 1
s 73daec73a commit 2
s 20fe55e23 commit 3
:wq
退出后会自动进入另一个编辑页面
编辑commit信息
//amend选项提供了最后一次commit的反悔
//git rebase --amend
git checkout develop
合并后的featrue01变为一次提交,合并到develop中
git merge feature01
git push
2步合成1步,合并提交同时合并分支
当前feature01
git rebase -i -autosquash develop
git checkout develop
git merge feature01
查看某行代码是谁改动的
$ git blame -L 283,+1 library/sql/groupsql.sql
e7bc901b5 (dev_one 2019-01-21 18:14:24 +0800 283) `tag` tinyint(4) DEFAULT '0' COMMENT 'tag for user',
查看某个函数每次的改动
1、2步配置一次即可,不用重复配置
1.用户目录下创建.gitattributes文件
~/.gitattributes
输入
*.php diff=php
2.配置gitattribute文件
git config --global core.attributesfile "~/.gitattributes"
3.查看函数修改,函数名可以正则匹配
git log -L :函数名的正则匹配:所在文件
git log -L :getUserInfo*function:library/user.php
项目根目录可以有.gitignore文件,用来设置igonre的目录、文件,即不会上传到git的目录、文件
例:
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln