Git笔记:基础操作、分支、远程仓库

使用git已经有一年的时间了,但之前对于git只学习了基础操作,没有学习分支相关的内容,最近有项目需要多人协同开发,会用到合并分支和解决冲突,于是我重新学习了git的相关知识,算是对git有一个更好的掌握吧。

一、基本配置

1.配置用户名和邮箱,配置文件在用户目录中,叫做.gitconfig

git config --global user.name “anonyeast”

git config --global user.email “east@anonyeast.top"

2. 解决GitBash乱码问题

git config --global core.quotepath false

并在${git_home}/etc/bash.bashrc 文件最后加入下面两行

export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

3.配置常用指令的别名,用于简化命令

(1)在用户目录下创建 .bashrc 文件。

(2)写入如下内容

#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'

二、本地操作

1.初始化当前目录为一个git仓库,完成之后会在当前目录创建一个叫做.git的文件夹,默认是隐藏的。

git init

2.提交到本地仓库

git add (工作区 --> 暂存区)

git commit -m '注释' (暂存区 --> 本地仓库) 

3.查看状态

(1)查看修改的状态(暂存区、工作区),可以查看当前工作区哪些文件有变化,下次add时,这些文件会被添加到暂存区。
git status

(2)查看提交日志,这个命令很重要,可以很清晰的看到每一次的提交记录和注释,以及提前到哪个分支(分支在后面会写)

命令形式:git log [option]
其中option可选择以下参数
--all 显示所有分支
--pretty=oneline 将提交信息显示为一行
--abbrev-commit 使得输出的commitId更简短
--graph 以图的形式显示

实际操作中使用上面在.bashrc文件中配置好的git-log命令即可,这个命令已经包含了以上4个参数,不用我们手敲。

4.版本回退,当提交之后发现提交的内容有问题需要撤销时,需要进行版本回退

git reset --hard commitID
其中commitID 可以使用 git-log 或 git log 指令查看,如下图所示

如果版本回退后,又想撤销回退操作,回到回退之前的版本,则可以通过以下命令查看操作记录,找到commitid,依然使用上面的命令回到回退之前的状态。

git reflog

5.添加文件至忽略列表

在工作目录中创建一个.gitignore的文件,在该文件中写不被add的文件。具体写法百度,这里就不赘述了。

三、分支

在gitbash中,每次只能操作一个分支,不能同时对多个分支进行操作,默认分支为master分支。

可以通过git-log指令查看当前分支,HEAD指向的分支就是项目当前所在的分支。

1.查看本地分支

git branch

2.创建本地分支

git branch 分支名

3.切换分支(重要)

git checkout 分支名

直接切换到一个不存在的分支(创建并切换)
git checkout -b 分支名

4.合并分支(重要)

将指定分支上的提交(commit)合并到当前分支,当前分支可以通过git-log查看HEAD指向,务必在合并分支前确认当前分支
git merge 分支名称

5.删除分支

有些分支合并到另一个分支后就可以删除了,也可能你误操作创建了一个不需要的分支。

git branch -d 分支名 删除分支时,需要做各种检查。当被删除的分支存在改动,却没有与任何分支合并时,这时候删除的话,这个分支的改动就会彻底丢失,git会认为你是在误操作,需要你进行确认,确认要删除的话使用下面的命令。
git branch -D 分支名 不做任何检查,强制删除

6.解决冲突

当一个分支合并到另一个分支时,如果出现了两个分支修改了同一个文件的同一行代码,就会发生冲突。

解决步骤:

1. 处理合并后的文件中冲突的地方
2. 将解决完冲突的文件加入暂存区(add)
3. 提交到仓库(commit)

四、远程仓库

请先在gitee/github/gitlab创建仓库,如果本地已经创建有本地仓库,建议远程仓库在创建时不要选择任何初始化选项,例如自动生成readme.md文件、设置开源协议等,否则一定会产生冲突问题。

1.添加远程仓库地址

git remote add <远端名称> <仓库路径>
远端名称:默认是origin,取决于远端服务器设置
仓库路径:从远程仓库获取此URL
例如: git remote add origin git@gitee.com:AnonyEast/git-learning.git

2.查看远程仓库

git remote

3.推送已经commit的内容到远程仓库

git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
(1)如果远程分支名和本地分支名称相同,则可以只写本地分支名,即:git push origin master
(2)-f  表示强制覆盖,当远程仓库与本地仓库修改了同一个文件的同一个内容,此时发生冲突,加上此参数可以强制覆盖。
(3)--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。
git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
git push 将master分支推送到已关联的远端分支。

4. 查看本地分支与远程分支的关联关系

git branch -vv

5.从远程仓库克隆(clone)

git clone <仓库路径> [本地目录]
本地目录可以省略,会自动生成一个目录

6.从远程仓库中抓取(fetch)和拉取(pull)

远程分支和本地的分支一样可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 1.抓取:git fetch [远程仓库名] [分支名]
  • 将远程仓库里的更新都抓取到本地,不会进行合并。
  • 如果不指定远端名称和分支名,则抓取所有分支。
  • 2.拉取:git pull [远程仓库名] [分支名]
  • 将远程仓库的修改拉到本地并自动进行合并,等同于fetch+merge。
  • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

7.解决合并冲突

在一段时间内,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修改完代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。
远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同,在此不再赘述。

AnonyEast

一个爱折腾的技术萌新

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐