安装
win https://git-scm.com/downloads
linux sudo
创建版本库
装c盘好多问题,vscode5k+的修改
直接
然后初始化
git init
删库直接删除库文件夹下的 .git文件
也可以cd到某个目录建库
版本控制
xx文件放到 gitrepo(自建)下
git add file1 file2
git add file3
git commit -m“注释说明”
git log 查看每次commit信息,一次提交就是一个版本
git log --pretty=oneline
回退一个版本
git reset --hard HEAD^
回到某个版本
git reset --hard 版本号前几位
回去后git log新的版本就藏起来起来了
可用 git reflog查版本号(commit id)
版本reset是靠指针实现的,速度快
到目前为止
工作区内容来自 gitrepo文件夹内容的变化,工作区的内容全部提交到分支上后
会变空,(文件不会丢失),新的更改会写进工作区
。git是版本库
git add 把新文件或修改送到暂存区stage
git rm 把删除文件操作送到stage
git commit 吧stage中内容送到当前分支,(现在的master分支是主分支,创建库会自动创建)
git status 查看状态
$ git status
On branch master
Changes not staged for commit:
工作区的修改内容
Untracked files:
工作区的新文件
Changes to be committed:
stage中内容
如果都提交了,会显示 nothing to commit, working tree clean
用git diff HEAD --filename 查看工作区文件和版本库里面最新版本的区别
git checkout -- filename
撤销工作区中的修改,stage不变,
修改工作区,但不add,commit的还是旧的stage中内容。
分支管理
修bug 新功能 协作开发等需要分支
查看分支:git branch 当前分支前面会标一个*号
git branch +参数 显示分支信息 (涉及后一节知识,方后面)
创建分支:git branch <name> 原始分支叫 master
如 git branch issue01 创建一个用来修bug的分支
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
常用 git merge --no-ff -m "描述" <name>
带--no-ff merge时生成一个新的commit,合并后保留被合并的分支合并前状态点
删除分支:git branch -d <name> -D是强制删除,当分支没合并时只能强制删除
查看分支合并图 git log --graph
git status也能看分支
git stash 保存当前工作区, 当不想提交又想切换分支可以
git stash list 查看
git stash apply stash@{数字}恢复到指定stash
git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
git stash pop,恢复的同时把stash内容也删
git cherry-pick <commitID> 另一个分支的commit修改适用到当前分支
比如bug没修复就分支了,一个分支的修bug后commit,回到另个一个分支可以用这个命令
标签tag
git tag -a <name> -m "说明" <commitID>
-m 说明 可省 直接git tag tagname,缺省commitID是最近的一次commit即 head
git tag查看所有标签
git show <tagname>查看标签信息
git tag -d <tagname> 删标签
推送某个标签到远程,使用命令git push origin <tagname>
推送全部尚未推送到远程的本地标签:
git push origin --tags
删远程标签 先删除本地,然后
git push origin :refs/tags/tagname
远程库与github
查看远程库的信息,用git remote -v
克隆github库到本地
git clone git@github.com:账户名/仓库名.git
或
git clone https://github.com/账户名/仓库名.git
第一种ssh方式需要把自己生成的ssh公钥(cmd 或者bash 下 ssh-keygen -t rsa 提示保存位置下的idras.pub )填入github setting 里面ssh 的new ssh
以上克隆只能看到克隆的master主分支
git checkout -b dev origin/dev
git checkout -b 分支名 远程库名/分支名 克隆后创建其它分支到本地
本地库送到github
github创建一个与本地库同名的仓库(我的叫 gitrepo)
然后
git remote add origin git@github.com:githubusername/gitrepo.git
远程库的名字就是origin,git的默认叫法,githubusername你的github账户名
(删除 git remote rm 远程仓库别名)
git push -u origin master (git push -u 远程库名 本地分支名)
本地库内容推动到github,第一次可以加 -u参数代表 把分支版本全推到github与之关联,之后需要省去
git branch +参数 显示分支信息
-a 本地及远端信息
-v与-verbose是一个效果
-vv会显示上游分支的名字
推荐 -avv 即 git branch -avv
网图,上部本地,下部远程,origin/xxbranch: ahead 2,behind1
ahead 1代表本地1个commit还没推送到远程库,behind1 代表远程服务器的2次提交还未合并到本地
当出现behind 时需要将服务器修改合并到本地,否则你的commit会与远程冲突
你需要先绑定本地远程分支,
git branch --set-upstream-to=origin/<branch> <本地branch>
然后 git pull 如有冲突需要手动解决然后git push origin <branch-name>
push前可使用 命令git rebase
rebase操作可以把本地未push的分叉提交历史整理成直线,在查看历史提交的变化时更容易