仓库
git init
:会在本地当前目录下创建一个git仓库git clone https://github.com/username/a.git
:下载远程库到本地git remote add origin git@server-name:path/repo-name.git
:关联一个远程仓库,前提是已经在gitlab上创建了一个仓库git push -u origin master
:第一次把本地工程推送到远程仓库,之后直接git push
即可
查看日志
git log
查看提交历史,可确定回退到哪个版本git log --pretty=oneline
查看提交历史,更好看而已git reflog
查看已执行的命令历史,可确定回退到哪个版本
工作区与缓存区
三种状态+远程库:
执行 add 添加命令后:
执行 commit 提交命令后:
- 工作区:修改或者新添加一个文件,处于工作区(撤销:
git checkout -- fname
) - 暂存区:执行
git add fname
后,处于暂存区(撤销:git reset HEAD fname
) - 分支:执行
git commit -m "desc"
后,提交到了分支(撤销:git reset --hard commit_id
) - 远程库:执行
git push
后,代码就推到了远程库
撤销操作
- 在工作区修改后,并未add到暂存区:撤销工作区的修改
git checkout -- fname
,就回到了和版本号一样的状态 - 在工作区添加了一行a,并add到缓存区,但没commit到分支上;然后又在工作区添加了一行b,并未add暂存区:执行
git checkout -- fname
就回到了添加到暂存区后的状态a - 在工作区修改后,并add到了暂存区:执行
git reset HEAD fname
,就把暂存区的修改撤销了,回退到工作区状态;再执行git checkout -- fname
就撤销了工作区的修改,回到了和版本库一样的状态 - 已经commit到了分支上:执行
git reset --hard commit_id
就撤销了提交,回退到了暂存区状态 撤销merge操作:
$ git log // 查看历史版本号(每条历史记录的第一行commit后的是版本号,拷贝前5个字符以上即可) $ git reset --hard 【版本号】 // 回滚
示例:
$ git log
commit 8a2b2261128388b3a84bc82aae46d7fbc47510df (HEAD -> lsy-practise, origin/lsy-practise)
Merge: 44950c2 1f16ec9
Author: liushunyun <liushunyun@58.com>
Date: Tue Aug 13 16:25:46 2019 +0800
删除拆分前的代码
commit 44950c242585dbc925ed8f0e4da3d96383ecfb22
Author: liushunyun <liushunyun@58.com>
Date: Sun Aug 11 10:25:28 2019 +0800
test
commit 1f16ec94f8a5ab42e6b3d03bc6ba27720a3b55c7 (origin/master, origin/HEAD, master)
Merge: 1c56749 6b202fe
Author: root <root@bjm6-19-154.58os.org>
Date: Fri Aug 9 11:35:34 2019 +0800
version:4.3.16.0,branchName:20190809112714076_release_9683_etongzhen-sandbox,integrations:upload_img_fix
回滚:
git reset --hard 8a2b22611 // 回滚到最近提交的那次,commit后的是版本号,取前边5个以上的字符即可
删除操作
rm fname
:从工作区删除,撤销删除:git checkout -- fname
git rm fname
:从版本库中删除文件,彻底删除:git commit
;撤销删除:git reset HEAD fname
,再git checkout -- b
即可完全恢复git checkout -- fname
:把误删的文件恢复到最新版本,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
分支管理
git branch dev
:创建dev分支git checkout dev
:切换到dev分支git checkout -b dev
:创建并切换到dev分支(从当前分支复制出dev新分支,注意push后再切换其他分支)git branch
:查看所有分支和当前分支git checkout -- fname
:注意:
是撤销工作区的修改git merge dev
:把dev分支合并到当前分支(如当前是master分支)git branch -d dev
:删除dev分支git push --set-upstream origin dev
:把本地分支push到远程仓库git checkout -b 本地分支名 origin/远程分支名
:从远程仓库拉取一条本地不存在的分支从当前分支拉新分支开发:
- 假设需要从当前的
master
分支创建新分支的dev2
进行开发:
git checkout -b dev2
- 假设需要从当前的
- 把新分支
dev2
push到远程
git push origin dev2
- 拉取远程分支
dev2
git pull
提示:
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> dev2 经过验证,当前的分支并没有和本地分支关联,根据提示进行下一步:
关联
git branch --set-upstream-to=origin/dev2
再次拉取 验证
git pull
把远程仓库中的dev2
分支拉到本地(本地之前没有该分支)
git checkout -b dev2 origin/dev2
如果成功,就会在本地自动创建新分支dev2
,并自动切换奥分支dev2
如果拉取不成功,需要执行 git fetch ;然后再执行上面的命令
注意:
在分支上修改并commit后,当切换到master分支后是看不到,必须合并分支后才可以。
查看本地项目git配置信息
- config 配置有system级别 global(用户级别) 和local(当前仓库)三个
- 设置先从system -》global -》local 底层配置会覆盖顶层配置 分别使system/global/local 可以定位到配置文件
示例:
- 查看系统config:`git config --system --list`
- 查看当前用户(global)配置:`git config --global --list`
- 查看当前仓库配置:`git config --local --list`
查看当前仓库的用户名、邮箱:
git config user.name
git config user.email
配置当前仓库的用户名、邮箱:
git config --local user.name zhangsan
git config --local user.email zhang@126.com
远程仓库
- 查看本地git项目对应的远程github路径:
git remote -v
即远程git的服务器地址 - 查看本地git项目是从github的哪个分支上拉下来的:
git remote show origin
子模块
- git submodule ...
参考:https://www.liaoxuefeng.com/w...
参考:https://git-scm.com/book/zh/v...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。