1. 初始化

1.1 设置账户

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

1.2 查看配置信息

git config -l
git config --global core.quotepath false     #让git支持中文

1.3 初始化

git init

2. 创建

git add                         #添加到缓存区
git commit -m "message..."      #提交到分支

3. 版本回退

3.1 查看修改情况

git status                      #显示当前状态
git diff                        #显示修改内容

3.2 查看修改历史

git log                         #显示提交历史
git log --pretty=oneline        #显示简略提交历史
git log --graph                 #显示图形化界面
git reflog                      #显示所有的历史提交

3.2 版本回退

在Git中,用HEAD表示当前版本,也就是最新的提交的上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100

git reset --hard HEAD^          #回退到上一个版本
git reset --hard commitId       #回退到指定版本
git revert HEAD                     # 撤销前一次 commit 
git revert HEAD^                  # 撤销前前一次 commit
git revert commit-id              #撤回指定commit-id ,比如:git revert 0818badf6882ea2664a205bc8ef3a85425bb2537

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向前一个版本

4. 工作区和暂存区

4.1 工作区

工作区就是电脑中能看到的目录

4.2 版本库

指.git目录

4.3 暂存区

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),执行git commit就可以一次性把暂存区的所有修改提交到分支。
缓存区

5. 撤销和删除

5.1 在工作区撤销

git checkout --file       #丢弃工作区的修改 
git checkout .             #本地所有修改的。没有的提交的,都返回到原来的状态
git stash                     #把所有没有提交的修改暂存到stash里面。可用git stash pop回复

5.2 在暂存区撤销

git reset HEAD <file>     #把暂存区的修改撤销掉(unstage),重新放回工作区
git checkout --file       #丢弃工作区的修改

5.3 在分支上撤销

git reset --soft HEAD^  #返回上一个版本,HEAD表示当前版本,上一个版本是HEAD^,上上个是HEAD^^,前100个版本写成HEAD~100
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改

#git revert 撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
git revert HEAD                     # 撤销前一次 commit,并且是新建一个新的提交,而不是删除之前的提交,下同
git revert HEAD^                  # 撤销前前一次 commit
git revert commit-id              #撤回指定commit-id ,比如:git revert 0818badf6882ea2664a205bc8ef3a85425bb2537

git clean -df               #返回到某个节点
git clean 参数
    -n 显示 将要 删除的 文件 和  目录
    -f 删除 文件
    -df 删除 文件 和 目录

5.4 正常删除

rm file                   #正常删除文件
git rm file               #从版本库删除文件
git branch -d futureName  #删除分支名
git commit -m "del..."    #向分支提交删除

###5.5 意外删除

rm file                   #意外删除文件
git chickout -- file      #删除错误的删除操作

6. 远程操作

6.1 remote添加远程仓库

git remote add origin gitAddress   #添加远端地址

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。Git会自动将原版本库路径存储为他的origin,通过-v命令显示可被获取或推送提交的路径

git remote -v

6.3 fetch获取数据

fetch命令是单向操作,可用于从另一个版本库中获取所有分支本地版本库不存在的提交。

git fetch origin             #获取远端提交

6.4 pull

获取操作通常会带来冲突,因为会有新的提交被添加到本地或别处版本库,在大多数情况下他们需要进行合并,pull命令会从远程版本库导入这些提交,然后在必要的情况下将他们合并到当前分支,pull = fetch + merge

git pull

6.5 push推送

格式是指定远程版本库名(例如origin),以及本地分支名(例如branch-a),branch-a分支下的新本地提交传送给origin所指向的远程版本库,并更新分支指针。

git push <远程主机名> <本地分支名>:<远程分支名>  #标准格式
git push origin HEAD  #将当前分支推送到远程的同名的简单方法
git push -u origin branch-a      #首次推送远端空仓库加-u,git会把本地的指定分支与远程新分支关联起来
git push origin branch-a         #将branch-a分支推送到远程origin仓库

需要注意的是push只针对快进合并,也就是远程版本库没有比本地更多更新的提交,同时,无参数调用push将只发送那些与其他版本库中同名的本地分支,而pull和fetch无参会选取全部分支。

6.6 克隆

git clone address     
git clone /Users/add/add...   #从本地克隆一个仓库      

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

7. 合并

假如有两个分支master和develop分支,现在将develop分支合并到master

# on the branch "master"
git merge feature

#多个分支合并
git octopus branches

7.1 合并的过程

git会查找两个分支的共同祖先,然后比较后合并,但有时如果两个分支都修改了某一处则会发生合并冲突,常见的有两种

  • 编辑冲突:两个开发者对同一行代码做了不同的修改
  • 内容冲突:两个开发者对某份代码的几个部分做出各自修改的时候

7.2 编辑冲突

当有内容冲突时会发生conflict提示,没有发生冲突的部分文件会被add,有冲突的部分文件会被插入冲突标志,开发者需要手动排除,默认显示两个分支的冲突标志,如果需要显示共同祖先输入下面命令

git config merge.conflictstyle diff3

解决冲突后即可add和commit

7.3 合并撤销

git reset --merge

7.4 快进合并

当分支只有一次提交,合并到主分支时git会直切前移为了保持主分支的线性,但是缺点是看不到版本库的发展,解决方法是

git merge --no-ff a-branch

8. 分支

8.1 创建和切换分支

git branch -a                                 #显示所有的分支(包括远程分支)
git checkout branchName            #切换到指定分支(如果是远程分支只输入分支名,不需要origin前缀)
git checkout -b branchName        #新建并切换到指定分支

9. 配置

9.1 查看用户名和email

//查看user.name
git config user.name
//查看user.email
git config user.email
//查看全部本地配置
git config --local --list

9.2 配置用户名和email

//配置user.name
git config --local user.name "your user name"

//配置user.email
git config --local user.email "your user email"

参考文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐