Git教程

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

这篇比较有些问题,在新的笔记使用gitlab时多人协作流程总结中已更新解决。

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。 Git 与 SVN 区别点:

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

安装

windows下安装

windows下安装很简单,下载安装就行了,下载地址

linux下安装

1、Debian/Ubuntu Git 安装命令为:

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev

$ apt-get install git-core

$ git --version
git version 1.8.1.2

2、 Centos/RedHat 安装命令为:

$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ yum -y install git-core

$ git --version
git version 1.7.1

Git工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。

  • 如果其他人修改了,你可以更新资源。

  • 修改后,更新资源,合并后, 提交修改。

  • 提交修改后,如果发现错误,可以撤回提交并再次修改并提交。

Git命令

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。你可以去注册一个github账号,然后创建一个项目,用本地git上传你的资源。

随便找个目录,点击右键,然后单击 Git Bash Here 进入git命令行工具

常用命令(简单了解,好多命令一般用不着)


git add xxx.txt 		添加该文件
git add . 				添加所有文件
git commit -m "message" 提交到本地git仓库
git status 				查看状态
git diff 				查看仓库提交前差异
git log 				查看所有版本详情
git log --graph 		查看分支图
git log --oneline  		查看简洁版提交记录(只查看记录commitId)
git reset --hard HEAD^ 	回到上一版本
git reset -- 36.... by commitId(即版本号,输入前几位即可)
cat xxx.txt 			查看内容
git reflog 				查看日志记录
git checkout -- xxx.txt 清除所有修改
rm xxx.txt 				删除
git rm 					确认删除,并且git commit
git clone url  			克隆资源
git checkout -b dev 	创建并切换到dev分支
git branch 				查看所有分支
git merge dev 			把dev分支合并到master
git pull 				把github最新提交抓下来
git push 				把本地的修改推到github
git rebase -i HEAD~2  	合并多次提交记录
git stash changes  		隐藏本地的改变,pull完了一定不要忘记 git unstash changes,恢复你刚隐藏的改变。

如果希望保留生产服务器上所做的改动,仅仅并入新配置项:
git stash
git pull
git stash pop

git config --global user.name "用户名"
git config --global user.email "邮箱"
git config --global credential.helper store 保存

Ctrl+c  	退出,进入下一命令行(大概就是这个意思,你试试效果就知道了)

这只是一部分git命令,如果想详细了解,可以自己去查资料

更新和提交

1、配置全局的name和email,这里是的你github的name和email

$ git config --global user.name "你的用户名"
$ git config --global user.email "你的邮箱"
$ git config --global credential.helper store //保存

2、从github克隆项目

git clone url

克隆路径有两种,一种是HTTPS,git登录即可;另一种是SSH,需要git设置钥。
https 和 SSH 的区别:

1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key,否则无法克隆。

2、https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSHkey的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

git设置密钥:

输入指令,进入.ssh文件夹

cd ~/.ssh/  

如果提示 “ No such file or directory”,你可以手动的创建一个 .ssh文件夹即可:

mkdir ~/.ssh  

生成key

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

连续按三次回车,这里设置的密码就为空了,并且创建了key。

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sEzgbZ3Lc9kslQ1LdMhkrUvQLsNiHOuZLRm8nTvzG4s 1062100557@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|    .      =*o.  |
|   . o ....o+*.  |
|    . =oo+ o+..  |
|     + +B.+=+    |
|      ooSX+=o.   |
|        Bo+..    |
|         . ..    |
|          +. o   |
|          E++.   |
+----[SHA256]-----+

最后得到了两个文件:id_rsa和id_rsa.pub

打开Admin目录进入.ssh文件夹,用记事本打开id_rsa.pub,复制里面的内容添加到你github 的ssh设置里即可(在你的setting的SSH and GPG keys里面添加ssh key)

测试一下该SSH key

$ ssh -T git@github.com

当你输入以上代码时,会有一段警告代码,如:

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?

这是正常的,你输入 yes 回车即可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

当然如果你密码输错了,会再要求你输入,直到对了为止。

密码正确后你会看到下面这段话,如:

Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

3、更新和提交

git add xxx.txt   添加xxx文件
git add .   提交所有文件(不包括忽略文件)
git commit -m "提交的描述信息(必写)"     提交到本地git仓库
git push   把本地提交推到github上
git pull   更新本地资源(即把github资源拉下来)

更新和提交有两种方法

方法1:

git stash  隐藏本地的修改
git pull   下拉资源
git stash pop 恢复本地隐藏和下拉资源合并
如果合并后有冲突,修改冲突,然后提交
git add .  添加所有文件
git commit -m "message" 提交到本地
git push   推到github

方法2:

git add .  添加所有文件
git commit -m "message" 提交到本地
git pull   下拉资源
如果合并后有冲突,修改冲突,然后提交
git add .  添加所有文件
git commit -m "message" 提交到本地
git push   推到github

这种方法会出现两次提交记录(输入命令 git status 会看到两次本地有两次提交),如果不嫌麻烦可以把这两次提交记录合并为一条:

git rebase -i HEAD~2

进入文本编辑页面,将第二个pick改成squash或者s,然后保存退出。如下:

pick c6e4557 create second.txt
s e1a7dfa add text in second.txt

这样这两次提交就合并为一次提交记录了
提示:个人感觉方法二有点麻烦或提交记录不简洁,建议用方法一。

版本回退

有时修改的内容不想要了,修改的东西有点多,不好改回去,怎么办?回退上一版本即可

先查看本地提交记录:

git log 

commit 7f0adef13054ab36a6013944c185e2a62b2ca462 Author: username
< email> Date: Thu Aug 3 10:22:25 2017 +0800

second

commit cefb64b5eb3903c497b63c29424d6968b8838447 Author: username
< email> Date: Thu Aug 3 10:09:30 2017 +0800

second

second

commit 66fe6b87f2474fe8c325f81901bc57d92376cb5c Author:
username
< email> Date: Thu Aug 3 09:17:27 2017 +0800

frist

以上是你的本地git提交记录,commit后面是版本号

回退到上一版本:

git reset --hard HEAD^   回到上一版本

回退到指定版本:

git reset -- 66fe6b8   回退到指定版本,版本号输入前几位即可

撤回提交

有时提交到本地git后,发现机密信息被提交;或者把冲突提交,并且github有更新,这时即不能push也不能pull,出现这些情况时,我们不要强推,强推可能把别人的push覆盖,我们可以撤回提交,恢复修改代码。

仅仅撤回commit操作,代码仍然保留:

git reset --soft HEAD^

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

撤回有这几个参数:
–mixed
不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .

–hard
删除工作空间改动代码,撤销commit,撤销git add . 完成这个操作后,就恢复到了上一次的commit状态。

设置忽略特殊文件

有些特殊文件我们不需要上传到远程仓库中,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

.gitignore文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则。

仓库目录下新建一个名为.gitignore的文件

因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照Linux的方式来新建.gitignore文件。

vim .gitignore

这样就可以在仓库目录下新建一个名为.gitignore的文件,并且进入编辑。不会用linux的vim,可以查看我的一篇博客这里面介绍了vi的简单用法(vim是vi的升级版)

.gitignore忽略规则

*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

忽略失效

如果第一次提交,没有设置好忽略文件,后期再加,这时忽略会失效,解决办法是把本地的要忽略的文件删除,然后上传,就可以了。

总结

这篇文章只是简单介绍了平时常用的几个功能,还有git的分支什么的等等,没有介绍,如果你感兴趣,自己可以去查查资料,研究一下。

### Git 入门教程与使用指南 Git一个分布式版本控制系统,广泛用于软件开发中,帮助开发者管理代码的变更历史、协作开发以及维护多个版本的代码库。以下是 Git 的基本使用和操作指南,适合初学者快速上手。 #### 1. Git 的安装与配置 在使用 Git 之前,需要先在本地环境中安装 Git。安装完成后,建议配置全局用户名和邮箱,以便在提交代码时记录作者信息。 ```bash # 配置全局用户名 git config --global user.name "YourName" # 配置全局邮箱 git config --global user.email "your.email@example.com" ``` 这些信息会记录在每次提交中,确保团队协作时可以追溯代码的来源[^1]。 #### 2. 初始化本地仓库 创建一个新的 Git 仓库可以通过 `git init` 命令完成。该命令会在当前目录下生成一个 `.git` 子目录,用于存储版本控制数据。 ```bash # 初始化一个新的 Git 仓库 git init ``` #### 3. 克隆远程仓库 如果已有远程仓库(如 GitHub、GitLab 公司内部 Git 服务器),可以使用 `git clone` 命令将远程仓库复制到本地。 ```bash # 克隆远程仓库到本地 git clone https://git.code.tencent.com/git-class-001/git-test.git ``` 克隆完成后,会在本地生成一个与远程仓库完全相同的副本,开发者可以在本地进行修改和提交[^2]。 #### 4. 查看仓库状态与提交历史 在进行提交修改之前,建议使用 `git status` 查看当前分支的状态,了解哪些文件已被修改但尚未提交。 ```bash # 查看当前分支状态 git status ``` 如果需要查看提交历史,可以使用 `git log` 命令: ```bash # 查看提交历史 git log ``` 在查看提交历史时,可以使用键盘上的方向键滚动,按 `Q` 键退出查看模式。 #### 5. 添加与提交更改 在修改文件后,需要将更改添加到暂存区,然后进行提交。 ```bash # 添加所有修改到暂存区 git add . # 提交更改并添加提交信息 git commit -m "描述本次提交的内容" ``` 提交信息应简明扼要,说明本次提交的目的修改的内容,便于后续查看和理解。 #### 6. 推送更改到远程仓库 提交完成后,可以将本地的更改推送到远程仓库,以便其他开发者同步更新。 ```bash # 推送本地提交到远程仓库 git push origin main ``` 其中 `origin` 是远程仓库的默认名称,`main` 是默认的主分支名称。如果使用其他分支,需替换为对应的分支名。 #### 7. 分支管理 Git 支持创建多个分支,便于并行开发和版本管理。常用的分支操作包括创建、切换、合并和删除分支。 ```bash # 创建新分支 git branch feature-branch # 切换到指定分支 git checkout feature-branch # 创建并切换到新分支(简化命令) git checkout -b feature-branch # 查看所有分支 git branch # 合并指定分支到当前分支 git merge feature-branch # 删除分支 git branch -d feature-branch ``` 分支管理是 Git 的核心功能之一,合理使用分支可以有效组织开发流程,避免主分支的不稳定状态[^3]。 #### 8. 使用 Git Rebase 整理提交历史 除了 `git merge`,还可以使用 `git rebase` 来整合分支的提交历史。`git rebase` 可以将一个分支的更改“移植”到另一个分支上,使提交历史更加线性、清晰。 ```bash # 切换到要 rebase 的分支 git checkout feature-branch # 将 feature-branch 的提交基于 main 分支进行 rebase git rebase main ``` 在 rebase 过程中可能会遇到冲突,需要手动解决冲突后继续 rebase 操作。 #### 9. 解决冲突 当多人同时修改了同一个文件的相同部分时,Git 会提示冲突。冲突文件中会标记冲突区域,开发者需要手动编辑文件,选择保留的代码。 ```bash # 冲突解决后标记为已解决 git add <filename> # 继续 rebase merge 操作 git rebase --continue ``` #### 10. 常用命令总结 | 操作 | 命令示例 | |--------------------------|---------------------------------------| | 初始化仓库 | `git init` | | 克隆远程仓库 | `git clone <仓库地址>` | | 查看状态 | `git status` | | 查看提交历史 | `git log` | | 添加修改到暂存区 | `git add .` | | 提交更改 | `git commit -m "提交信息"` | | 推送更改 | `git push origin <分支名>` | | 创建分支 | `git branch <分支名>` | | 切换分支 | `git checkout <分支名>` | | 创建并切换分支 | `git checkout -b <分支名>` | | 合并分支 | `git merge <分支名>` | | 删除分支 | `git branch -d <分支名>` | | Rebase 操作 | `git rebase <目标分支>` | | 解决冲突后继续 Rebase | `git rebase --continue` | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值