浏览器上搜索Git教程,要么讲的不详细,要么描述的很深奥的样子,Git是开发工具,作为一名程序开发人员,只需掌握理解基本的Git操作,满足日常开发的需求即可,接下来,让我们一起使用Git吧
- 在本地创建一个版本库
$ cd GitProject
$ mkdir learngit
$ cd learngit
$ git init
# git init 将learngit初始化为git仓库
$ ls -ah
# 这时候,会发现,learngit 目录下会出现一个隐藏目录.git
# 配置全局仓库的账号和密码
$ git config --global user.name "userName" //你的用户名
$ git config --global user.email "email address" //你的邮箱地址
# 2. 如果你的公司项目也放在git上面,为了不与个人账号的发生冲突,这时候需要给这个仓库单
# 独设立账号和密码进入到这个仓库里面,使用下面命令
$ git config user.name "userName" //你的用户名
$ git config user.email "email address" //你的邮箱地址
2.在learngit 目录下创建readme.txt文件
$ git add readme.txt
# 告诉git要将readme.txt文件添加到仓库
$ git commit -m "this is a readme file"
# 告诉Git,把文件提交到仓库 -m 是备注
$ git add fil1.txt file2.txt
# 需要提交多个文件的时候,只需在add h后添加多个文件名即可
3.版本回退
$ git log
# 查看commit_id,--pretty=oneline参数保留主要的commit_id等信息。
$ git log --graph --pretty=oneline --abbrev-commit
# --graph 会显示分支合并的图示情况,--abbrev-commit,显示commit_id的前七位
$ git reset --hard HEAD^
# 回到该版本的前一个版本,N个^代表该版本之前的第N个版本
$ git reset --hard commit_id
# 回退到指定的commit_id版本
$ git reflog
# 要重返未来,看命令历史,以便确定要回到未来的哪个版本。
4.查看git的工作状态
$ git status
# 查看当前add、commit 的状态
$ git diff HEAD -- readme.txt
# 命令可以查看工作区和版本库里面最新版本的区别
5.撤销修改
(1)工作区某个文件的内容,想直接丢弃修改时:
$ git restore <file>
(2)工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令`git reset HEAD <file>`,就回到了(1),第二步按(1)操作。
$ git restore --staged <file>
$ git restore <file>
(3) 已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退。(不过前提是没有推送到远程库)
$ git log --pretty=oneline
$ git reset --hard commit_id
6.删除文件
(1)在任务管理器删除文件,需要在版本库中删除
$ git add/rm <file>
$ git commit -m "message"
(2)误删文件,需要恢复
$ git restore <file>
# 上面撤销修改的时候也是用了该命令,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”,但是从来没有被添加到版本库就被删除的文件,是无法恢复的!
- 添加远程仓库
$ git remote add origin git@github.com:wyu3115008888/learngit.git
# GitHub
$ git remote add origin https://gitee.com/wyu3115008888/learngit.git
# Gitee,origin为Git默认远程仓库别名,也可以去别的(但不建议)
$ git push -u origin "master"
#由于远程库是空的,我们第一次推送`master`分支时,加上了`-u`参数,Git不但会把本地的
#`master`分支内容推送的远程新的`master`分支,还会把本地的`master`分支和远程的
#`master`分支关联起来,在以后的推送或者拉取时就可以简化命令。
8.删除远程仓库
$ git remote rm origin
# 此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
9.克隆仓库
# Git
$ git clone git@github.com:wyu3115008888/gitskills.git
# Gitee
$ git clone https://gitee.com/wyu3115008888/gitskills.git
# git add 与git clone 使用`https`除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用`ssh`协议而只能用`https`。
10.分支管理
(1)创建与合并分支
$ git checkout -b dev
$ git switch -c dev
# 创建并切换到dev分支,两个命令都可进行创建并切换分支
# 以上命令可以实现下面两条命令功能
$ git branch dev
# 创建分支,基于当前分支创建的分支例如:有master分支和dev分支,两个分支的内容不同,在dev分支下创建分支dev_1,此刻分支dev_1的内容会和dev的一样,与master的不一样。
$ git checkout dev
$ git switch dev
# 切换到dev分支,两个命令都可进行切换分支
$ git branch
# 查看分支,其中带*的是当前分支
$ git branch -vv
# 查看分支关联情况,其中带*的是当前分支
$ git merge dev
合并指定分支dev到当前分支
$ git branch -d dev
# 合并完之后,可以删除分支
$ git branch -D dev
# 当commit分支内容,但这时候发现commit的内容不需要了,还未merge,强制删除commit但未合并的分支
(2)解决冲突
$ git merge <branch>
# 当在<branch>分支下修改,未commit时,在别的分支下,可以查看修改的内容,当commit时,别的分支仅看到自己分支的内容。在两个分支下修改同一文件,在哪个分支下commit,就提交到哪个分支,提交完之后,另一个分支是看不到自己刚刚修改过的内容的,要是commit之后再修改,未commit是切换不到别的分支的。
# 合并指定分支dev到当前分支,当两个分支修改同一内容时,就会产生冲突。
(3)bug分支
当你接到一个修复一个bug的任务时,很自然地,你想创建一个分支`issue`来修复它,但是,当前正在`dev`上进行的工作还没有提交,也不能现在提交,因为还未完成当前的任务。
$ git stash
# 把当前工作现场“储藏”起来,好像回到上一次commit状态,等以后恢复现场后继续工作。
# 然后首先确定要在哪个分支上修复bug,假定需要在`master`分支上修复,就从`master`创建临时分支
$ git stash list
# 查看stash的内容
$ git stash apply
# 恢复,但是恢复后,stash内容并不删除
$ git stash drop
# 删除stash的内容
$ git stash pop
# 恢复的同时把stash内容也删了:
11.远程仓库
$ git remote
# 查看远程库信息
$ git remote -v
# 查看远程库详细信息
$ git switch -c dev origin/dev
# 在本地创建分支,并与远程仓库的分支相关联
$ git pull <remote> <branch>
# 拉去远程仓库内容,当前分支未和远程仓库分支进行连接时,需指定远程仓库分支
$ git push origin <branch>
# 若远程仓库的未创建该分支,这自动创建该分支,但是并未关联起来
# 若远程仓库创建又该分支,但未与本地分支关联,需要每次提交的时候指定origin <branch>
# 若<branch>为未和本地相关联的、不同名的分支,push失败,提示error: src refspec test does not match any
$ git branch --set-upstream-to=origin/dev dev
# 指定本地`dev`分支与远程`origin/dev`分支的链接
$ git push --set-upstream origin <branch>
# 指定当前分支与远程<branch>分支的链接,本地分支与远程分支不同名时关联不上
$ git branch --unset-upstream
# 撤销本地分支与远程分支的映射关系
12.tag标签
$ git tag V1.0
# 在当前分支的最新commit_id下打标签
$ git tag v0.9 commit_id
# 在指定的commit_id上打标签
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
# 创建带有说明的标签,用`-a`指定标签名,`-m`指定说明文字
$ git tag
# 可以查看所有标签
$ git show <tagname>
# 可以看到说明文字
$ git tag -d v0.1
# 删除标签
$ git push origin <tagname>
# 要推送某个标签到远程
$ git push origin --tags
# 一次性推送全部尚未推送到远程的本地标签
$ git push origin :refs/tags/v0.9
# 先从本地删除tag,然后,从远程删除。删除命令也是push,格式如上