git 常用操作总结

本文是对常用git操作做一个总结,后续也会同步到我的个人网站。

1. 初始化

用户
$ git config --global user.email "your email"
$ git config –-global user.name "your name"
复制代码

2. 秘钥

查看是否存在秘钥
$ ls -al ~/.ssh
复制代码

id_rsa 是私钥,id_rsa.pub 是公钥 id_rsa.pub 是你需要上传到 github 的 SSH KEY

生成秘钥
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
复制代码

3. 本地库和远程库

已创建有远程库,未创建本地库
$ git clone "your repo"
复制代码
已创建本地库,未创建远程库
1. 新建文件夹
$ mkdir test 
				
2. 初始化 git 
$ git init 
	
3. 移除原有的 origin                    
$ git remote rm origin
	
4. 添加你的远程库(SSH地址)
$ git remote add origin "your remote repo"
	
5. 更新本地库
$ git pull
 
6. 首次推送与远程库建立关联,以后直接 git push 就可以
$ git push --set-upstream origin master 
复制代码

4. 分支操作

查看、新建、切换、删除分支
查看当前所在分支
$ git branch
	
查看所有分支
$ git branch -a

查看远程库信息
$ git remote -v
	
新建分支
$ git branch "new branch"

切换分支
$ git checkout "target branch"
	
新建并切换到新分支
$ git checkout -b "new branch"

新建分支并和远程分支进行关联
$ git checkout -b "new branch" origin/"new branch"

合并分支到当前所处分支上
$ git merge "your branch"
	
删除分支
$ git branch -d "your branch"
	
强制删除未 commit 的分支
$ git branch -D "your branch"
复制代码

5. 正常流程

查看当前工作区状态
$ git status
	
添加单个文件到暂存区
$ git add xxx.txt
	
一次性添加所有改动文件
$ git add .
	
提交文件到本地版本库
$ git commit -m "I add a file."
	
推送本地更新到远程版本库
$ git push
	
本地库关联远程库
$ git push --set-upstream origin master
复制代码

6. 对比文件

工作区和暂存区之间差异对比
$ git diff "xxx.txt"

暂存区和版本库之间差异对比
$ git diff --cached(--staged) "xxx.txt"

工作区和版本库之间差异对比
$ git diff master
复制代码

7. 查看历史提交记录

$ git log
复制代码

8. 版本回退

HEAD 是最新版本,HEAD^ 是上一个版本
$ git reset --hard HEAD^ 

回退到指定id,git log 查看版本id,版本id不用全部输入,取头几位就可以
$ git reset –hard cb926e7e
复制代码

9. 撤销工作区修改

使用版本库中的文件或者暂存区中的文件替换工作区的文件
让文件回到最近一次 git commit 或 git add 时的状态
$ git checkout -- "xxx.txt"
复制代码

10. 删除文件

删除工作区中的文件
$ rm "xxx.txt"

提交删除操作到暂存区
$ git rm "xxx.txt"

提交删除到版本库,在版本库中彻底删除文件
$ git commit -m "remove file"
复制代码

11. 分支管理策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

  • master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
  • developer分支用来干活,也就是说,developer分支是不稳定的,到某个时候,比如1.0版本发布时,再把developer分支合并到master上,在master分支发布1.0版本
  • 你和你的小伙伴们每个人都在developer分支上干活,每个人都有自己的分支,时不时地往developer分支上合并就可以了

所以,团队合作的分支看起来就像这样:

12. 储藏工作现场

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

储存工作现场
$ git stash

工作现场列表
$ git stash list

恢复但不删除储藏栈的工作现场
$ git stash apply

恢复并删除储藏栈中的工作现场
$ git stash pop
复制代码

13. 多人协作工作模式

  • 试图用git push origin branch-name推送自己的修改
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
  • 如果合并有冲突,则解决冲突,并在本地提交
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功

14. 创建 .gitignore

在 git 工作区根目录下创建 .gitignore 文件,把要忽略的文件名写进去,git 就会自动忽略这些文件

15. 创建别名

给 status 创建别名 st 
$ git config --global alias.st status
复制代码

16. git 配置文件

配置文件放在 ~/.gitconfig

17. git fetch 和 git pul 区别

要讲清楚这两个命令的区别,就需要从git clone开始讲起 假设你在github上有一个远程仓库地址是xxx,然后你从远程仓库clone到本地仓库

$ git clone xxx
复制代码

执行完此命令后,Git会自动为你将远程仓库命名为origin,并下载其中所有的数据到本地,在本地建立所有远程存在的分支,并且命名为origin/xxx,例如远程分支有master、developer,那么本地就会建立origin/master分支、origin/developer分支,并且它们都是处于remotes目录下,是隐藏的。使用命令git branch -a就可以看到隐藏目录remotes,结果显示为remotes/origin/master以及remotes/origin/developer。接着,Git会继续建立一个属于你的本地master和developer分支,位置和远程origin/master、origin/developer分支处于相同的位置,你就可以开始工作了。 这样,我们在本地仓库的本地分支和远程分支就都有了,并且始于同一位置。

如果其他人向github上xxx推送了他们的更新,那么服务器上的相应分支就会向前推进。如果在本地的相应分支进行了commit提交到本地代码库,那么本地的master或者developer分支也会向前推进,不过只要你不和服务器通信数据,那么本地的remotes/origin/master(developer)指针仍然会在原地不动。

注意这里的本地分支master已经前移,服务器上的master分支也已经前移,所以可以说本地的remotes/origin/master是过时的。

$ git fetch origin
复制代码

运行git fetch origin命令后,会同步远程服务器上的数据到本地,该命令首先找到origin是哪个服务器,从上面获取你未曾拥有的数据,更新到你的本地remotes/origin/master(developer),然后把remotes/origin/master(developer)的指针移动到最新的位置上:

这就是git fetch origin的作用

比较本地 master 分支和 origin/master 分支有什么区别
$ git log master..origin/master 

切换到本地 master 分支下
$ git checkout master 

合并 origin/master 分支到本地 master 分支
$ git merge origin master
复制代码
  • git pull 相当于 git fetch origin 和 git merge
  • git fetch 相当于先将服务器上的 origin 分支更新到本地 remotes/origin 分支上,然后手动去 merge 合并 origin 分支到本地分支上

这就是 git pull 和 git fetch 的区别

18. git 删除未跟踪文件

删除未跟踪文件
$ git clean -f

删除未跟踪文件目录
$ git clean -fd

正式删除文件以前先查看哪些会被删除
$ git clean -nf
$ git clean -nfd
复制代码

19. 在本地删除远程已经没有的分支

$ git fetch -p origin
复制代码

20. 重命名本地分支

$ git branch -m old-local-branch-name new-local-branch-name
复制代码

21. 删除远程分支

$ git push origin :old-remote-branch-name
复制代码

22. 本地分支与远程分支建立关联(远程分支不存在也可以)

切换到本地分支
$ git checkout local-branch

push 到想要建立关联的远程分支
$ git push -u origin/remote-branch
复制代码

23. 重新跟踪远程文件

先删除远程文件
$ git remote rm origin

跟踪新远程文件
$ git remote add origin https://xxx.git

或者合并成一条命令
$ git remote origin set-url https://xxx.git
复制代码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯DevOps

Git的增改查删

Windows系统:在官网直接下载https://git-scm.com/downloads,安装即可

29640
来自专栏静晴轩

详解 Cookie 纪要

从事 Web 开发已有近17个月;在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感~差不多是了解一二,然而又非真切的明晰;这就使得再用的时...

35690
来自专栏北京马哥教育

Linux之任务计划

用过windows的同学应该都知道在控制面板中有一个“任务计划”选项,我们可以通过向导设置让计算机在某个时间点或者开机时运行某个脚本或者批处理等等,方便我们的...

29440
来自专栏LanceToBigData

Git(一)之基本操作详解

前言   在这段时间的工作中一直都是用Git作为版本控制,只是知道简单的几个命令,没有去了解它的内部原理。所以周末有时间来系统学习。   现在的公司基本上都是用...

207100
来自专栏烂笔头

Python爬虫代理IP池

目录[-] 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速...

85260
来自专栏闪电gogogo的专栏

Git学习笔记

此篇笔记是学习参考廖雪峰老师的Git教程,附上学习网址:https://www.liaoxuefeng.com/wiki/0013739516305929606...

25680
来自专栏猿份到

maven私服快速入门

android 开发时,类库依赖管理一般是拷贝到相应 libs 目录然后配置文件中引用该类库,或者引用 jceneter 中第三方类库等。 前者...

30980
来自专栏编程心路

Github学习文档-2

你可能会问学习 GitHub 和 Git 有什么关系吗?首先 GitHub 的功能本身就是基于 Git 来实现。现在的问题是 Git 是什么?Git 是一个开源...

25830
来自专栏武军超python专栏

2018年8月1日学习linux中的vi编辑器和多python环境的管理软件Anaconda,miniconda的使用

********************** 今天遇到的新单词: fail  n/v失败 file  n文件 extract v提取 verify...

26820
来自专栏技术博文

Git本地仓库(Repository)详解

大纲: 一、前言 二、概述 三、在Windows上安装Git 四、创建本地仓库 五、本地仓库管理详解 六、总结 注,注,测试机 CentOS 5...

24850

扫码关注云+社区

领取腾讯云代金券