Git常用操作速查,没有人比我更简单!!

Git工作流中有三个重要点:

  1. Remote远程仓库,是push的目的地

  2. Repository本地仓库,是commit目的地

  3. workspace工作区,是当前编辑区

在这里插入图片描述

注意:所有操作都是基于本地分支和本地缓存的远程分支,只有将改动push出去,才能修改版本库(真实远程分支)的内容!!!
举例:git fetch操作,是将真实远程分支拉取到本地缓存起来,而git pull则是将真实远程分支拉取到本地缓存后,与本地分支进行合并!

Git初始化

# 1. 在github上创建项目仓库
# 2. 配置本地git
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
# 3. 初始化本地仓库-提交-链接远程仓库
git init
git add .
git commit -m "first commit"  (first commit 本次提交的内容)
git remote add origin <your project git url>
git push -u origin master 
git push

Git配置

git配置基本上都在config配置文件中

配置级别从顶层到底层:

systemgloballocal
系统用户当前仓库

底层配置会覆盖顶层配置

#  查看系统配置
git config --system --list

#  查看用户配置
git config --global --list

#  查看当前仓库的配置
git config --local --list

可以通过命令来查看当前git的所有配置

#  检查当前config所有配置
git config --list

git初始化配置用户信息

git config --global user.name "xxx"
git config --global user.email "xxx"

init

使用git init用于初始化本地仓库,一般流程为

git init
git add .
git commit -m "initial commit"

注意:初始化项目后会生成.gitignore文件,该文件在第一次被提交后,再做修改则不会起作用!!!
原因:.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

clone

使用git clone将远程仓库拉下来,一般流程为

#  将代码拉下来放在当前目录中
git clone xxx链接

#  将代码拉下来放到指定目录中
git cloen xxx链接 xxx目录

commit

提交跟踪文件的改动,会将改动提交到当前所在的分支上,一般流程为

git add .
git commit -m "comment"

#  使用-a参数免去add操作,直接提交tracked文件,但是没有tracked的文件不会提交
git commit -a "comment"

branch

用于查看分支,新建分支和修改分支

#  查看所有分支
git branch -a

#  新建本地分支
git branch xxx

# 建立本地分支,并与远程分支关联
git branch xxx origin/xxx

#  修改本地分支名
git branch -m oldxxx newxxx

# 删除本地分支
git branch -d xxx
# 强制删除本地分支
git branch -D xxx

push

用于将本地暂存区推送到远程、修改远程分支等操作

#  推送分支
git push origin 本地名:远程名
#  如果推送到远程同名分支可以简写,不存在会被创建
git push origin xxx

#  删除远程某个分支(本地空分支推送)
git push origin :远程名
#  等同于
git push origin --delete 远程名

#  将当前分支推送到远程origin主机对应分支
git push origin
#  可以通过-u指定远程主机,这样之后就不用指定origin
git push -u origin 分支名
#  若远程主机被-u指定后,可以简写
git push

pull

拉取远程分支到本地,操作其实是两步:拉到本地远程分支,合并本地远程与本地分支:

origin dev—>origin/dev—>dev

注意:此处的合并会将commit记录合并了,不会产生merge的commit

# 将远程主机的某个分支拉到本地的某个分支上合并
git pull 远程主机 远程分支:本地分支
git pull origin dev:xiaopi3

# 如果与当前分支合并,可以省略本地分支
# 拉远程dev与当前本地分支合并
git pull origin dev
# 等同于
git fetch origin
git merge origin/dev

# 拉取本地分支对应的远程分支并合并
git pull
# 可以采用rebase模式
git pull --rebase origin dev:xiaopi3

checkout

git checkout命令用于切换分支或恢复工作树文件。git checkout是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。对于新建文件,由于没有纳入git管理,会被带入切换的分支中,解决方法是commit一下再切换

git branch -a # 查看当前所有分支
git checkout 分支名  # 切换到本地分支
git checkout -b 本地分支 origin/远程分支 # 切换到远程分支对应的本地分支

同时,checkout命令可以用来合并冲突,常在git pull后用:

git checkout --ours file1 file2 file3
// ours:保留当前所在分支的修改
// theirs:保留其他分支的修改

merge

合并两个或者多个分支的内容,一般流程

#  将xxx合并到当前分支,并自动commit
git merge xxx

log

查看提交记录

# 查看提交日志,以下三种都可以
git log  #  详细
git log --pretty=oneline  #  简单
git reflog  # 操作记录
# 回滚本地记录
git reset --hard xxxid
# 回滚远程记录
git push -f [origin xxx]

rm

用于删除工作区、版本库(远程)、暂存区的文件(如果删除文件夹,需要-r参数)

# 删除本地文件,并将改动放入暂存区
# 删除工作区文件,等同于直接资源管理器删除文件,提交后版本库自动删除相应文件,注意如果本地已经修改了的文件再删除会报错(删除的文件必须和版本库一致,才能删除)
git rm xxx.txt

# 删除本地文件,并将改动放入暂存区
# 删除文件,强制,无论本地和版本库是否一致,无论是否放入了暂存区,都可以删除,push后版本库相应文件也会删除
git rm -f xxx.txt

# 取消文件跟踪,本地不删除,删除暂存区文件,并将改动放入暂存区
# 只删除暂存区文件,工作区保留,即已经被git add过的文件,处理后将不再被git跟踪,push后版本库也删除相应文件
git rm --cached xxx.txt

reset

git reset命令用于将当前分支的HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。该命令不会改变工作区的内容!

HEAD表示当前分支最新的提交

git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]

将当前分支重置到指定commit,默认为HEAD

–hard

从commit之后的任何改动都被丢弃,并将HEAD指向commit

#  第一次提交:add test1.c
#  第二次提交:add test2.c
#  第三次提交:add test3.c ---> HEAD

#  将HEAD往过去挪一步:此时抛弃了test3.c,只保留了前两个,但是不改变工作区内容
git reset --hard HEAD~1
#  撤销最近一次commit,将其挪回工作区
git reset head~1

rebase

用于将一个分支的修改,合并到当前分支

应用场景

使用情形:同一个分支上,A和B都做了commit,其中一个人做了push,另一个人push时就会失败

此时几种办法:

pull:直接拉取会出现冲突,解决冲突后可以提交,等价于merge

merge:将远端代码拉下来与本地代码merge,然后解决冲突,再add、commit、push

rebase:将当前的commit存为patch,然后拉取最新代码,然后自动合并

图解:

origin和mywork在C2的基础上往右前进两个commit:

在这里插入图片描述

如果采用merge,此时工作流为:

在这里插入图片描述

如果采用rebase,将改动放置到临时区,然后拉取最新代码,然后合并:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他操作

git status

查看当前项目的跟踪情况

git fetch

将远程分支拉取到本地远程分支上

本地仓库分为本地分支本地远程分支:本地远程分支前面加了origin

该命令将远程分支拉到本地远程分支上,但是不会与本地分支合并

git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

$ git fetch origin master
$ git log -p master..origin/master
$ git merge origin/master

以上命令的含义:

  • 首先从远程的originmaster主分支下载最新的版本到origin/master分支上
  • 然后比较本地的master分支和origin/master分支的差别
  • 最后进行合并

git diff

比较工作区和暂存区文件差异

git diff <file> #  比较当前文件和暂存区文件差异 git diff

git diff <id1> <id2> #  比较两次提交之间的差异

git diff <branch1> <branch2> #  在两个分支之间比较

git diff --staged #  比较暂存区和版本库差异

git diff --cached #  比较暂存区和版本库差异

git diff --stat #  仅仅比较统计信息

git remote

#  去除本地缓存的远程主机不存在的分支
git remote prune origin

# 将本地仓库关联远程仓库
git remote add origin xxxurl

git-keygen

生成ssh密钥,设置好用户名和邮箱后

ssh-keygen -t rsa -C "邮箱"

连续三个回车即可,将生成的两个文件中的pub后缀的拷贝到github ssh设置中即可

git 暂存工作

将当前工作区的修改暂存起来,之后可以在任意分支上pop出来

git stash # 将当前工作保存
git pop # 将上一次保存的工作恢复到工作区

# 给stash备注
git stash save xxxx

# 查看当前保存的工作表
git stash list

# 查看储存单元和最新提交的diff
git stash show

# 恢复指定储存单元
git stash pop 索引

典型应用场景

1.新建本地分支,修改代码,提交到远程同名分支

# 切换到基础分支
git checkout abc

# 在该分支上进行coding,结束

# 查看所有分支
git branch -a

# 新建本地分支
git branch xxx

# 切换到分支
git checkout xxx

# 提交修改到暂存区
git add .
git commit -m "xxx"

# 提交代码到远程分支
git push origin abc

2.重命名本地分支,删除远程分支,并提交到远程

# 查看当前分支
git branch -a
# 重命名原来本地分支
git branch -m oldxxx newxxx
# 切换到分支
git checkout xxx
# 提交修改到暂存区
git add .
git commit -m "xxx"
# 删除远程原来分支
git push origin --delete oldxxx
# 提交代码到远程分支
git push origin newxxx

–delete可以写成-d

3.重置本地仓库

有时候我会把本地的代码彻底搞乱,因此需要放弃本地修改,选择从远端仓库拉取代码覆盖,具体操作如下

git fetch --all

git reset --hard origin/[branch-name]

git pull

4.拉取远程最新分支,并与本地分支合并

由于某个分支上有人push了最新的代码,我们在push代码时如果需要防止与其冲突或者某个分支新增了功能,我们当前分支需要使用,则需要将其分支与我们的进行合并

# 切换到分支a
git checkout a
# 将a分支最新代码拉下来
git pull
# 切换回分支b
git checkout b
# 合并
git merge a
# 推送合并分支到b
git push

5.报错内容出现upstream branch与current branch不匹配

git push -u origin currentxxx

6.中途修改让.gitignore文件生效

一般而言创建仓库时添加.gitignore文件,之后add、commit、push会自动生效,但是有时候中途修改该文件后也想让其立即生效,需要清除一下缓存cache,才能使其生效

git rm -r --cache # 清除缓存
git add .
git commit -m "update .gitignore"
git push origin master
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值