git操作手册

指令

基本指令

仓库初始化

git init

添加文件

git add <文件名>
git commit -m '评论的内容'`
git push origin master 提交到远程仓库

删除文件

git rm -r --cached 文件名/文件夹名
git commit -m '说明'
git push origin master 将操作提交到远程仓库

拉取远程仓库到本地

git clone gitlab@project_name.git

查看当前文件变化

git status
git diff

查看提交历史

git log

git add

在这里插入图片描述

git commit

只commit修改的文件及新增文件

git add --all
git commit -m "Pushing all files to git"
git push

git reset

commit之后,想保留修改,取消commit

git reset --soft HEAD^  // 回退到上一个节点,保留工作区的内容
git reset --hard HEAD^  // 回退到上一个节点,删除工作区的内容
git reset --soft HEAD~1  // 回退到上一个节点
git reset --hard HEAD~2  // 回退到上两个节点,并删除工作空间所有修改

reset head就是将当前的head回退到上一个节点
--soft会保留当前工作空间的修改,相当于单纯的取消commit
--hard会连工作空间的修改一起删除掉

git checkout/branch

该指令用来创建和切换分支

git checkout -b my-branch origin-branch  // 复制origin-branch并创建新分支my-branch
git checkout -b name/task/spot-number/description  // 创建分支并进入到该分支
git checkout username/task/spot-number/description  // 切换到该分支
git checkout master  // 进入到master分支   
git branch  // 查看当前分支

git merge

git merge branchA branchB  // 将branchA合并进branchB
git merge branch_name  // 将branch_name merge到当前的分支
git reset --merge  // 取消merge

不加第二个参数origin-master`时默认是当前分支。

合并参数:

参数含义
fffast-forward,默认使用该参数。
如果我们是合并到自己的直接上游分支,不会产生merge log;
如果上游分支已经有其他的commit了,则会进行一次三方合并(magic),并生成merge log;
如果三方合并失败,就需要解决冲突并commit后再merge
-no-ffno fast-forward
默认是第三方合并,一定会生成merge log
-ff-only只接受 fast-forward

git pull, merge & rebase

git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase origin/master

git pull实现的效果如下图所示,黑色为master主线,橙色为本地支线。该指令将master主线的commit5 pull至本地,形成了菱形的效果。
在这里插入图片描述
git pull --rebase则取消了之前的所有commit,把这些所有的改动临时保存为补丁(patch)(这些补丁放到”.git/rebase“目录中),然后把当前分支更新到最新的master分支,最后把保存的补丁应用到当前分支上。
使用rebase时,需要切换到当前的支线,然后再rebase主分支。

git checkout my-branch
git rebase origin-branch

如下图所示:
在这里插入图片描述
在执行git pull -rebase指令时,如果出现文件冲突,先处理冲突的文件,然后用git add更新内容,最后继续执行git rebase --continue。如果想回退,可以执行git rebase --abort

git log/relog

git relog
查看所有分支的所有commit记录(包括已经被删除的 commit 记录和 reset 的操作)
git log
查看历史commit(不能查看已经删除的commit记录

git diff

比较两个分支的区别

git diff branch1 branch2  // 比较两个分支的区别
git diff branch1 branch2 /path/to/file  // 比较两个分支指定文件的区别

比较工作区和最新commit之间的差异

git diff HEAD

git tag

git可以标记重要的提交节点

// 列出历史标记节点
git tag
// 列出匹配当前字段的节点
git tag -l "v1.8.5*"

git branch

git branch  // 展示当前所有的分支
git branch new_branch  // 复制当前分支并重命名为new_branch
git branch -d branch_name  // 删除本地分支(该分支已经merge到远程)
git branch -D branch_name  // 删除本地分支(该分支只存在于本地, 还未merge到远程)

常见使用场景

本地分支写完后push到远程分支

首先是常规的创建分支:

git checkout -b name/task/spot-number/description  // 创建分支并进入到该分支

然后git addgit commit,然后

git push origin xianming/task/spot-number/description-of-this-feature

从master分支修改准备merge到test环境时,发现别人在test分支上已经有了其他修改

我们一般是clone repo的master分支来修改代码,改完之后先push到test环境。但如果此时test环境已经有其他人merge的代码,我们再merge的话就会覆盖其他人的代码。
这种情况下我们可以先将远程的test分支拉到本地,将自己写的分支merge到本地的test分支,然后再将这个test分支push到远程(origin/test)去。
1. 首先拉取远程的test分支到本地的test分支

git checkout -b test origin/test

如果本地已经有test分支,可以先checkout到test分支,再将远程的test分支更新到本地的test分支:

git checkout test
git pull origin test:test

然后将本地的branch merge到本地的test分支:

git checkout test
git merge xianming/task/spot-number/description-of-this-feature

最后将本地merge好的test分支push到远程test分支,并在gitlab页面对冲突进行修改:

git checkout test
git push origin test

在本地分支开发时,远程master发生修改,需要merge到本地分支

首先本地切换到master分支,将远程master分支pull到本地

git checkout master
git pull origin master

然后切换到本地自己的分支,并merge本地更新好的master分支,到本地自己正在开发的分支

git checkout xianming/task/spot-number/description-of-this-feature
git merge master

执行git merge master之后原则上我们的文件已经merge完了,但是命令行出现merge冲突提示,可以使用:

git mergetool

对冲突文件进行修改

本地和远程都需要回退到上一个节点

本地回退到上一个节点:

git reset --soft HEAD^  // 回退到上一个节点,保留工作区的内容
git reset --hard HEAD^  // 回退到上一个节点,删除工作区的内容
git reset --soft HEAD~1  // 回退到上一个节点
git reset --hard HEAD~2  // 回退到上两个节点,并删除工作空间所有修改

远程回退到上一个节点:
方法一:本地回退后直接强制push到远程(这种方式可以避免mr失效)

git push origin branch_name -f

方法二:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支(mr会失效)

git checkout the_branch
git pull   // 更新该分支到本地
git branch the_branch_backup // 将这个分支copy到the_branch_backup
git reset --hard HEAD^  // 回退到上一个节点,删除工作区的内容
git push origin :the_branch // 删除远程的该分支
git push origin the_branch // 将回退的本地分支重新push到远程

git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支

这种方式会mr失效,需要重新申请一次mr

检查文件变化

检查哪些文件变动过

git status

清除当前工作区没有add的修改

git checkout .

删除本地分支/远程分支

假设要删除的本地分支为my_branch.
首先要切换到其他的分支, 然后执行删除:

git checkout master
git branch -d branch_to_delete

删除远程分支:

git push origin --delete my_branch

删除当前工作区的所有改动

git reset --hard HEAD : 将stage area中未提交的file回滚到之前的commit状态
git clean -d -f 删除未跟踪的目录和文件

trouble shooting

git checkout: you need to resolve your current index first

我们在执行git checkout的时候可能会遇到这个问题。这个问题原因是当前的分支下有merge conflict
解决方法1: 解决这个merge conflict
例如冲突的文件是在file.txt这个文件,我们对该文件进行对应的增删后,执行一下语句

git add file.txt
git commit

解决方法2:取消当前分支的merge request

git reset --merge

使用git merge时显示Automatic merge failed,无法自动合并

这种情况是想要合并时,两个分支都对同一个文件进行了修改,git无法识别到底采用哪个分支的代码,因此自动合并失败。这种情况下,可以使用:

git mergetool

决定要使用冲突文件中的哪部分代码。其中

其他

一些概念

在这里插入图片描述

git config

git config文件:
git config文件有三个:

  1. /etc/gitconfig:包含了适用于系统所有用户和所有项目的值。
  2. ~/.gitconfig:只适用于当前登录用户的配置。
  3. 位于git项目目录中的.git/config:适用于特定git项目的配置。
    对于同一配置项,三个配置文件的优先级是1<2<3

git 用户名和email:

$ git config  user.name "ximi"
$ git config user.email "ximi@gmail.com"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值