git学习和使用

git是分布式版本管理工具

一、git下载和安装

windows版本国内镜像下载:https://npm.taobao.org/mirrors/git-for-windows/

安装之后,在任意文件下右键就可以启动相应的终端操作

 

 二、git的配置

在任意文件夹下,打开Git Bash命令行进行操作。

输入命令

$ git config -l

得到的是git所有的配置信息

$ git config --system -l

而此命令使用system用来只查看系统的配置

$ git config --global -l

global过滤用来查看用户本地全局配置

所以可以设置用户本地全局配置,通过以下命令

$ git config --global user.name "xxxx"
$ git config --global user.email "xxxxx@xxx"

 

可以分别设置用户名和邮箱。

 

而这些配置都保存在哪里呢?

在git的安装目录下的etc文件夹下有一个gitconfig文件其中保存着系统级(--system)的信息(对所有用户都适用)。  (git/etc/gitconfig)

在C盘用户目录下中有.gitconfig文件存放着登录用户配置(--global)。

 

在某一文件夹下使用git命令

$ git init

 

则建立在当前目录下建立.git文件,此文件只与当前仓库配置有关系。

 

三、git基本原理

3.1工作区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。还有远程的git仓库(Remote Directory)。

 

workspace:是本地所写代码的项目文件所在处,没有参与到版本控制当中。

Index/Stage:是暂存区,临时存放代码改动。

Repository:本地仓库,本地存放的版本数据。

Remote:远程服务器所所托管的代码。

 

3.2文件状态

git中有四种文件状态:

  • Untracked:未跟踪,并没有参与git的版本控制,可以通过 git add 命令使其放入暂存区状态变为Staged。
  • Unmodify:文件进入本地仓库,但是没有修改,若修改则会变成Modified状态;若 git rm 则会将其移出版本库,变成Untracked状态。
  • Modified:文件修改,但是没有提交仓库。可以 git add 提交到暂存区;也可以 git checkout 从仓库中取出文件,来覆盖之前的修改。
  • Staged:暂存状态。可以通过 git commit 提交代码到仓库中,文件变为Unmodify状态;也可以 git reset HEAD [filename] 取消暂存,状态变为Modified。

查看文件的状态使用以下命令:

$ git status

 

查看某一文件状态:

$ git status [filename]

 

 

3.3文件忽略提交

在代码管理当中,有些本地配置文件不需要提交到仓库中去,所以会有一个文件用来记录哪些文件不需要提交,这个文件就是".gitignore"。

有如下规则:

  1. "#"为注释。
  2. 通配符: * 为任意多个字符,[abc]为字符可以选择的范围,{string1,string2,string3}为可选字符串
  3. 名称前面有!则为例外规则,将不被忽略。
  4. 名称前面有路径分隔符:/,那么就是在此目录下的文件被忽略(不是文件夹),文件夹不被忽略。
  5. 名称后面有路径分隔符:/,那么就是在此目录下的文件夹忽略(该文件夹下的所有文件)。

 

3.4设置本地绑定ssh免密登录

进入C盘的用户目录下,找到 .ssh 文件夹,打开后进入命令行输入命令

$ ssh-keygen

 

生成相应的密钥,之后打开id_rsa.pub文件将其添加到github或者gitee的账号当中。

 

四、git基本命令

从远程服务器上下载项目使用clone。

$ git clone [url]

 

 将修改过的代码放入暂存区(.表示当前目录)

$ git add .

 

将暂存区的代码提交到本地仓库中(-m表示提交信息,必须要有)

$ git commit -m "xxxxx"

 

将本地仓库的代码提交到远程服务器上

$ git push <远程主机名> <本地分支名>:<远程分支名>

此处的远程主机名可以通过git remote -v来查看 

 

从远程服务器拉取代码到本地仓库

git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。

也就是先下载远程服务器代码,然后再合并本地仓库代码

$ git pull <远程主机名> <远程分支名>:<本地分支名>

上面命令表示,取回 origin/master 分支,再与本地的 brantest 分支合并。

如果本地分支名与远程分支名相同,则可以省略冒号:

 

将远程服务器仓库添加到本地,name为远程主机名字,可以自行规定(需要注意的是在远程push和pull都需要此操作)

$ git remote add [<options>] <name> <url>

 

查看远程服务器仓库信息

$ git remote -v  # 查看信息

 

 git reset

五、git分支管理

分支管理可以同时管理多种版本,这种方式使其在不同版本之间的开发不受影响,并且可以合并分支。

一般主分支为稳定的版本,其他分支有开发版本,开发版本完成后可以合并到主分支上。

 

创建分支命令:

git branch (branchname)

 

切换分支命令:

git checkout (branchname)

 

合并分支(将[合并的分支]合并到当前的分支中)

git merge [合并的分支]

 

回退版本(git reset)

$ git reset [--soft | --mixed | --hard] [HEAD]

HEAD 说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

  • 以此类推...

--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前(设置的head参数之前)的所有信息提交:(stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。简而言之就是你的没有commit的修改会被全部擦掉)

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,把所有差异都混合(mixed)放在工作目录中。

--soft 会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。

下图为图示

 

六、常见问题

1.合并分支时的问题

fatal: refusing to merge unrelated histories

解决方案:在操作命令后面加 –allow-unrelated-histories

$ git merge master --allow-unrelated-histories

 

posted @ 2022-01-23 11:40  secuy  阅读(38)  评论(0编辑  收藏  举报