工作——git的学习

作者:小 琛
欢迎转载,请标明出处

git是什么?

理解“版本”的概念

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。结合我们日常生活中的内容,每个产品都有它的版本,各个版本间或多或少存在差异。而对于开发者而言,版本的更换就等于我们对代码的修改

例如:
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

git对于开发者的意义

个人的理解是:git像是一个连锁的仓库,当你将代码交给它管理后,它通过记录快照的方式存储,当你对某些内容进行修改后,git通过描述的方式记录本次修改,并将修改后的内容存放。此外,该仓库通过网络实现连锁功能,本地仓库可以通过克隆的方式拉取内容,亦可以通过推送的方式将已经完成的工作与主体进行合入

git的几大特征

  1. 直接记录快照,而非差异比较
  2. 近乎所有操作都是本地执行
  3. Git 保证完整性
  4. Git 一般只添加数据

git的安装

在 Linux 上安装

如果你想在 Linux 上用二进制安装程序来安装基本的 Git 工具,可以使用发行版包含的基础软件包管理工具来安装。 以 Fedora 为例,如果你在使用它(或与之紧密相关的基于 RPM 的发行版,如 RHEL 或 CentOS),你可以使用 dnf:

$ sudo dnf install git-all

如果你在基于 Debian 的发行版上,如 Ubuntu,请使用 apt:

$ sudo apt install git-all

要了解更多选择,Git 官方网站上有在各种 Unix 发行版的系统上安装步骤,网址为

https://git-scm.com/download/linux。

Mac下安装

在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。

$ git --version

如果没有安装过命令行开发者工具,将会提示你安装。

如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 macOS Git 安装程序可以在 Git 官方网站下载,网址为

https://git-scm.com/download/mac。
在这里插入图片描述

Git macOS 安装程序。
Figure 7. Git macOS Installer.
你也可以将它作为 GitHub for macOS 的一部分来安装。 它们的图形化 Git 工具有一个安装命令行工具的选项。 你可以从 GitHub for macOS 网站下载该工具,网址为

https://mac.github.com。

Windows下安装

在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 https://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。

要进行自动安装,你可以使用 Git Chocolatey 包。 注意 Chocolatey 包是由社区维护的。

另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 GitHub Desktop 网站。

git的基本操作

git clone

克隆现有的仓库到本地

$ git clone https://github.com/libgit2/libgit2

git status

检查当前文件的状态

$ git status
On branch master
Your branch is up-to-date with ‘origin/master’.
nothing to commit, working directory clean

git status -s
git status -s 命令到一种格式更为紧凑的输出。

$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt

git diff
查看尚未暂存的文件更新了哪些部分

一次提交过程
  • git add
    使用命令 git add 开始跟踪一个文件
  • git commit
    将缓冲区内容提交到本地

git commit -m “bugfix”

git commit -a
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

  • git push
    将本地内容推送至当前所在的分支(仓库)
  • git rm
    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交
  • git log
    查看提交历史
查看、设置用户名

git config --global user.name " "

一个重要的操作:撤销操作

在任何一个阶段,都有可能想要撤消某些操作。

  1. 提交的文件有遗漏
    适用场景:提交文件有遗漏
    $ git commit --amend
    这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。

$ git commit -m ‘initial commit’
$ git add forgotten_file
$ git commit --amend

  1. 取消暂存的文件
    使用场景:暂存文件中有某个文件不希望作为暂存

git reset HEAD CONTRIBUTING.md
将该文件从暂存区拿出

  1. 撤消对文件的修改
    使用场景:将修改的文件恢复
    这个命令会令当前所做工作丢失,需谨慎使用

$ git checkout – CONTRIBUTING.md
将该文加恢复

  1. 回退到之前的某个版本
    使用场景:当下的工作已经完全无意义,需要回退到之前的版本

git reset 版本号
通常先使用git log查看提交信息,拿到对应的版本id

  1. 撤销暂存区的文件

git rm --cached删除暂存区文件

远程仓库的含义

远程仓库是指托管在因特网或其他网络中的你的项目的版本库

  1. 查看远程仓库

git remote 命令
它会列出你指定的每一个远程服务器的简写
你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

  1. 添加远程仓库
    一般情况下,我们使用git clone命令,它会自动添加远程仓库到本地

git remote add pb https://github.com/paulboone/ticgit
这种方法亦可,不过不常用

  1. 从远程仓库中抓取与拉取

$ git fetch
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

  1. 推送到远程仓库

$ git push origin master
需要有权限;且需要本地内容为仓库最新版;

分支的使用

个人对分支的理解:

分支是开发中常用的手段,它保障主线(master)正常。就像是一件艺术品,多人对它进行雕琢,为了避免最终产物被破坏,实际开发人员会拉取一个与maser相同的分支,在这个分支上去做自己的开发,当开发完成并通过测试后,将分支合入master。
同时,分支的使用可以清楚的区分工作内容,例如:手中现有两个待解决的问题,可以拉取两个分支,每个分支处理一个问题。

  1. 新建分支

$ git branch iss53

  1. 切换分支

git checkout iss53

常用:新建分支并切换至该分支

git checkout -b iss53

  1. 合并分支
    场景:在某个分支上的开发工作已经完成,我们需要将分支和并至master。

$ git checkout master
Switched to branch ‘master’
$ git merge iss53
Merge made by the ‘recursive’ strategy.
index.html | 1 +
1 file changed, 1 insertion(+)

  1. git pull

相当于git fetch + git merge操作

  1. git push

$ git push origin serverfix
推送至该分支

使用变基完成冲突分支的合并

  1. git fetch origin 同步远程分支信息
  2. git rebase 目标分支
  3. 出现冲突,则会rebase失败,git会将冲突部分给出,本地手动解决冲突
  4. git add . +git reabse continue 即将修改冲突后的文件添加并继续变基
  5. git push -f 待合并的分支: 强推到自己分支,会让commit数目减少并完成变基合并

删除远程分支的某些文件

git rm --cached 文件名 :删除本地
git commit 完成提交
git push orgin 远程分支

使用submoudule实现分支依赖

使用场景:当前仓库的开发需要用到其它仓库的内容,例如:需要静态编译一个Qt的程序,为了保证所有人在拉去仓库后的都能编译,使用submoudule将QT静态编译需要的文件一同clone

创建

  1. clone自己的分支,在自己分支下:git submodule add http/ssh path
    其中,http/ssh代表目标分支的url或ssh方式,path为所依赖分支的存放位置
  2. 接着git add . ; git commit ; git push远程仓库就有了该依赖库
  3. 其它用户使用时,首先拉去主仓库,之后git submodule init && git submodule update

解决冲突的方法

变基法

  1. git fetch origin
  2. git rebase 目标分支
  3. 本地解决冲突
  4. git add + git rebase --continue
  5. git push
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值