git-commands
git-commands

git-commands

一、概念

1.为什么要使用Git

为了更好的去管理我们每次的更改(版本控制)

2.Git的诞生

  • linux之父:Linus
  • linux开源
  • 提交补丁和保存归档
  • 2002,专有的分布式版本控制系统bitkeeper来管理和维护代码
  • 2005,结束,收回使用权
  • 2个星期用c写出来
  • 源代码管理的好处:方便多人协同开发;方便版本控制

3.结构分析

1631109420501

二、操作

1.安装

git --version
git --help

2.创建本地仓库

方式一:当前目录作为git仓库
# 初始化
git init
#已初始化仓库
>>>Initialized empty Git repository in /home/lemon/.git/
方式二:指定目录作为Git仓库
git init 指定目录

3.配置个人信息

# 1.全局配置个人信息
git config --global user.name "xf"
git config --global user.email "xf@mq.com"
# 配置信息在家目录下  ~/.gitconfig
===========================================
# 2.针对项目配置个人信息
git config user.name "xf"
git config user.email "xf@mq.com"
# 配置信息在  .git/config

image-20210910010626157

4.文件添加、修改

git status
git add 文件 # 工作区---》暂存区
git add . # 全部文件
git commit -m '备注信息' # 暂存区---》仓库
git commit -am "备注信息"# 工作区---》仓库

5.查看历史记录

git log [option]
git log --pretty=oneline 将提交信息显示为一行
git log --all  显示所有分支
git log --abbrev-commit 使得输出的commitId更简短
git log --graph 以图的形式显示
================================
简化:
# 用于输出git提交日志
alias git-log='git log --pretty=oneline --all --abbrev-commit --graph'
# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'

================================
git reflog # 删除commit,也能查询
**
git reflog用的多
**
git diff HEAD -- readme.txt# 查看修改的difference

6.回退版本

git reset

--soft(回退仓库)
--mixed(回退仓库、暂存区)
--hard (回退仓库、暂存区、工作区)
#--hard用的多

HEAD
 -HEAD 当前版本
 -HEAD^ 上一个版本
 -HEAD^^上上一个版本
 。。。。
 ~数字
 -HEAD~0 当前版本
 -HEAD~1 上一个版本
 。。。。

 版本号

image-20210910013014529

撤销缓存区

image-20210910013455787

  • 从工作区和仓库区中间的暂存区,撤回到工作区
git reset HEAD <file>
git reset --hard 4b8ed33 # 序号可用reflog查看

7.删除

在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交:

$ git add test.txt

$ git commit -m "add test.txt"
[master b84166e] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    test.txt

no changes added to commit (use "git add" and/or "git commit -a")

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

8.分支

# 查看分支
git branch
git branch -v

# 创建分支
git branch 分支名

# 切换分支
git checkout 分支名
# 或者:
git switch <name>

# -b:创建并切换
git checkout -b dev
# 或者
git switch -c dev

# 相当于两条命令: 
$ git branch dev
$ git checkout dev

# 合并分支
合并到你的主分支,一定要checkout回主分支
git merge feifei(自己的分支)

# 合并冲突
场景:两个分支在同一个文件的同一个位置有两套不同的修改。Git无法决定用哪一个,必须人为来决定
vim
git add .
git commit -m '备注'

# 删除分支
git branch -d <name>

9. 远程仓库

# 连接远程库(SSH)
$ git remote add origin git@gitee.com:lemon_guess/test4854.git

# 连接远程库(HTTPS)
$ git remote add origin git@gitee.com:lemon_guess/test.git 

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

# 查看远程库信息
$ git remote -v

# 移除掉远程仓库的配置
$ git remote rm origin

# 针对本项目配置个人信息
git config user.name "xf"
git config user.email "xf@mq.com"

# 代码推送到远程仓库
git push 远程仓库别名 分支名

# 代码拉取到本地仓库
git pull 远程仓库别名 分支名

Gitee相关

参考链接:https://gitee.com/help/articles/4181#article-header0
1.生成密钥

$ ssh-keygen -t rsa -C "lemon_guess@163.com"

然后一路enter,结果如下:

image-20220329105419319
2.查看公钥

$ cat /home/lemon/.ssh/id_rsa.pub

3.连接测试

$ ssh -T git@gitee.com

四、常见问题

问题一:

别人先提交了自己的工作代码到远程仓库,导致自己提交时时,由于自己当前版本落后远程最新版本,导致提交失败。

解决:当前分支落后了远程仓库的分支,推送不进去如何解决呢!

# 1. 使用git stash save "暂存" 将自己修改的代码,进行一个本地仓库的临时缓存。

$ git stash save "暂存"
Saved working directory and index state On master: 暂存

# 2. 使用git stash list 查看缓存代码片段。

$ git stash list
stash@{0}: On master: 暂存

# 3. 执行pull命令 将远程仓库更新到本地。

$ git pull origin master

# 4. 将我们的修改合并到更新后的代码中,stash@{0} 就是我们自己暂存的标记

$ git stash pop stash@{0}

# 5. 回到自己代码中,合并或删除不需要的代码。

# 6. git status 查看文件修改状态

# 7. git checkout  文件名称  (各个文件名之间用空格  隔开)  撤销不需要的提交文件

# 8. git add 提交文件名称    (各个文件名之间用空格  隔开)  需要提交的文件。不建议直接使用git add .

# 9. git commit –m”  修改记录说明”  提交到本地仓库

# 10. git push origin master 是推到远程master库

问题二:

在使用git协同开发时,难免会出现不同的人员,同时修改某个文件导致代码冲突的问题。

这时候我们提交代码前,应该首先获取远程最新版本,与本地版本合并。回到代码中解决冲突,在做提交。

# 查询当前远程的版本
$ git remote -v
# 获取最新代码到本地(本地当前分支为[master],获取的远端的分支为[origin/master])
$ git fetch origin master  [示例1:获取远端的origin/master分支]
$ git fetch origin pin[示例2:获取远端的origin/pin分支]
# 查看版本差异
$ git log -p master..origin/master [示例1:查看本地master与远端origin/master的版本差异]
$ git log -p dev..origin/pin[示例2:查看本地dev与远端origin/dev的版本差异]
# 合并最新代码到本地分支
$ git merge origin/master  [示例1:合并远端分支origin/master到当前分支]
$ git merge origin/pin[示例2:合并远端分支origin/dev到当前分支]

问题三:

有时候,我们用Git的时候有可能commit提交代码后,发现这一次commit的内容是有错误的

那么有两种处理方法:

1、修改错误内容,再次commit一次

2、使用git reset 命令撤销这一次错误的commit

$ git reset --soft HEAD^  # 撤销这一次错误的commit

问题四:

日常开发中,由于一个项目可能有多个人维护,每个人开发不同的模板,造成别人提交了代码再当你提交代码时提示版本不一致,无法push。

解决办法:
1.首先将远程仓库的master(或dev)下载到本地的分支上

$ git fetch origin master:tmp

2.查看tmp分支与本地有什么不同

$ git diff tmp

3.将tmp分支与本地分支结合

$ git merge tmp

这时候可能会出现两个版本有冲突的界面,出现这个界面不要慌,如果想退出这个界面的话,按“q”
然后用idea打开项目,看看有哪些文件有冲突,一般变红色的文件是有冲突的地方

第一步:在<<<<<<< <分支名> ======== >>>>>>>><分支名> 删掉,冲突代码自行合并修改
第二步:

git add <已修改冲突文件>,比如pom.xml

$ git add pom.xml

第三步:合并,注意:这里commit提交时不能带上文件

$ git commit -m "合并日志"

分支名由(first|MERGING)变成(first)说明合并成功
如果不知道怎么add冲突文件,可以先执行第三步,它会提示你哪些文件冲突没添加,再进行二、三步。

由于一个项目有多个人维护,不可能直接提交到远程master,那么我们就提交到远程分支上

$ git push origin master:dev

如果远程仓库上有dev分支,则直接提交到这个分支;如果没有,则创建。

4.最后别忘了删除分支

$ git branch -d tmp  

补:本地切换分支为

$ git checkout dev # 切到dev分支

发表回复

您的电子邮箱地址不会被公开。