git的使用

git的使用

git和github 的区别

  • Git 是一种方法。而 GitHub 只是使用这种方法的一个代码仓库,就是git是操作的,GitHub是个网址

初始化git仓储

新建一个项目project,点进目录右击选择git bash

 git init # 初始化仓库,这个git对我们项目的代码进行备份

配置用户名和邮箱

 git config --global   user.name "xiaoming" # 用户名

git config --global user.email  "xx@sina.cozcm" # 邮箱


git config  user.email "zc@qq.com"
git config  user.name "zc"
不加global是局部的

把代码存储到 git 仓储中

  • 分两步走:

    • 把代码放到.git隐藏目录的大门(暂存区)

       git add ./readme.md # ./readme.md 文件路径要说明
      
    • 把门口的代码放入房间里面

       git commit -m "这是对这次添加东西的说明"
      

区域划分:

  • 工作区:就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • 暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master。

查询当前所处的工作状态git status

 On branch master
nothing to commit, working tree clean
# 我们提交完了,当前的工作区是干净的


(use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt
# 把文件放在了暂存区

(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt
# 我们的文件修改了,但是没有放到暂存区(大门口)

如果我们修改了两个文件是不是要add两次命令呢,不需要

 git add ./ # 当前目录只要是修改过的文件都放到暂存区

一次性把我们修改的代码放到房子里面去

 git commit --all -m "一些说明"

查看日志

 git log # 查看历史提交的日志
git log --oneline # 简洁版的日志

git 版本回退

先用日志功能查看我们修改过的功能,在选择回退的版本

修改过后的版本日志

 $ git log --oneline
489310a (HEAD -> master) 添加了js和一个功能
01ebf78 我们完成四个功能
20e8c3c 我们完成三个功能
bc9c3b5 这次加了一个功能
6dad8ac 这是我的开始
 git reset --hard Head~1  # 1 表示退回到上上次代码提交的状态
						 # 0 表示上一次

退回后的版本

 01ebf78 (HEAD -> master) 我们完成四个功能
20e8c3c 我们完成三个功能
bc9c3b5 这次加了一个功能
6dad8ac 这是我的开始

通过版本号回退
查看日志

 $ git log --oneline
489310a (HEAD -> master) 添加了js和一个功能
01ebf78 我们完成四个功能 # 01ebf78版本号
20e8c3c 我们完成三个功能 # 20e8c3c版本号
bc9c3b5 这次加了一个功能
6dad8ac 这是我的开始
 git -reset --hard 01ebf78 # 精确的回退到某一次的提交状态
 01ebf78 (HEAD -> master) 我们完成四个功能
20e8c3c 我们完成三个功能
bc9c3b5 这次加了一个功能
6dad8ac 这是我的开始

假如说我们退回之后又后悔之前的操作咋办呢?

 git -reset --hard 01ebf78 # 精确的回退到某一次的提交状态

但是如果我们把窗口关掉了,记不住版本号,又想回到以前的状态咋办呢

 git reflog  # 可以看到每一次切换的版本的记录,可以看到所有提交的版本号
 01ebf78 (HEAD -> master) HEAD@{0}: reset: moving to Head~1
489310a HEAD@{1}: commit: 添加了js和一个功能
01ebf78 (HEAD -> master) HEAD@{2}: commit: 我们完成四个功能
20e8c3c HEAD@{3}: commit: 我们完成三个功能
bc9c3b5 HEAD@{4}: commit: 这次加了一个功能
6dad8ac HEAD@{5}: commit (initial): 这是我的开始

忽略文件

-空文件夹不被管理
	-指定某些文件或者文件夹不被git管理
    -在项目根路径,跟.git文件夹一个路径,新建.gitignore.,在里面配置
    - 语法:
    	# 号是注释,没有用
        文件夹名字,表示文件夹忽略,不被管理
        /dist 表示根路径下的dist文件夹,不被管理
        *.py   表示后缀名为py的文件,都被忽略
        *.log*

分支管理

主分支:默认的是master

创建分支:

  git branch dev # 创建了一个dev分支 创建dev分支里面的东西和master分支的东西是一样的

切换分支:

 git checkout dev # 切换到指定分支

查看分支:

 git branch

"""
$ git branch
  dec
  dev
* master # 当前所在分支
"""

合并分支:

 git merge dev # 指定分支的名称

比如我们我们创建分支,在分支里面已经完成了我们的功能五,但是当我们去切换到master的时候我们忘记在分支里面添加了功能五,又在master里完成了功能五,当我们去合并的时候会出现

 $ git merge dev
Auto-merging readme.md
CONFLICT (content): Merge conflict in readme.md
Automatic merge failed; fix conflicts and then commit the result.

合并的时候如果有冲突,需要手动去处理,如何去处理呢,那就是要到你完成的功能里面去选择,处理完后还需要再提交一次。

远程仓库

提交代码到GitHub(当作git的服务器)

 git push [地址] master #

拿到远程的代码

首先要建立一个新的仓储

 git push https://github.com/zc117809/test112.git master

克隆

要先建立一个文件,在文件里打开git bash输入

 git clone https://github.com/zc117809/test112.git 

多次执行会覆盖本地的内容

ssh 方式上传代码

有公钥和私钥,这两个是有关联的

  • 生成公钥和私钥

     ssh -kegen -t rsa -c "邮箱"
    

多人协作

小明和小红现在同时写作开发,小红在服务器上pull到小明的数据,pull完之后,小红在html文件上做了一个功能,备份到本地,这个时候小明又更新了版本,小红又去pull这个时候会出现冲突,小红新添加的功能会和小明更新的版本上出现错乱。

总结:

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
  • 解决完之后还要上传到服务器push

当我们push时,加上-u参数,在下一次push时我们只需要写上git push 就能上传我们的代码(加上-u之后,git拉取当前我们分支与远程指定的分支进行关联,git push origin master

原文地址:https://www.cnblogs.com/zc110/p/12860354.html