Git笔记

本文详细介绍了Git的使用方法,包括安装配置、创建版本库、版本回退、管理版本库等操作,还阐述了远程仓库Github的配置、本地与远程库的推送和克隆,以及分支管理、标签管理等内容,最后说明了如何使用Github进行开源项目协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

è¿éåå¾çæè¿°

目录

安装及配置

1.安装完git后首先需要设置

2.配置颜色

创建版本库

1.通过git init命令,把当前目录变成Git可以管理的仓库

2.通过git add命令,把文件添加到stage

3.通过git commit命令,把文件提交到仓库

版本回退

1.通过git log命令,查看历史commit记录

 2.通过git reset命令,进行版本回退

3.通过git reflog命令,用来记录你的每一次命令

版本库

1.通过git status命令,查看版本库状态

2.通过git diff命令,可以查看工作区和版本库里面最新版本的区别

3.通过git checkout -- file,可以丢弃工作区的修改

4.通过git reset命令可以把暂存区的修改撤销掉(unstage),重新放回工作区

5.删除文件

远程仓库Github

1.配置自己的Github

2.本地库推送到远程库

3.远程库克隆到本地库

分支管理

1.创建分支

2.通过git branch命令,查看当前分支

 3.通过git checkout命令,切换分支

3.通过git merge命令,合并分支

4.通过git branch -d命令,删除分支

4.分支冲突

5.分支合并策略

6.临时修复bug

7.使用feature分支开发新功能

8.多人协作 

9.rebase

标签管理

1.创建标签

2.查看标签

3.标签推送到远程

4.删除标签

5.注意

使用Github


安装及配置

1.安装完git后首先需要设置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

2.配置颜色

git config --global color.ui true

创建版本库

1.通过git init命令把当前目录变成Git可以管理的仓库

git init

2.通过git add命令把文件添加到stage

git add readme.txt

与之相反的命令,从stage中删除

git rm --cached readme.txt

3.通过git commit命令把文件提交到仓库

git commit -m "wrote a readme file"

版本回退

1.通过git log命令,查看历史commit记录

参数表示简略信息,返回的是commit id

git log  --pretty=oneline 

 2.通过git reset命令,进行版本回退

当前指向HEAD,回退1次和2次,可以使用HEAD^和HEAD^^,回退n次,参数为HEAD~n,参数也可以是commit id

git reset --hard HEAD^

3.通过git reflog命令,用来记录你的每一次命令

用于回退一次后使用git log找不到回退前的commit id

git reflog

版本库

1.通过git status命令查看版本库状态

git status

2.通过git diff命令,可以查看工作区和版本库里面最新版本的区别

git diff HEAD -- readme.txt

git diff:             是查看 workspace 与 index 的差别的。 
git diff --cached:    是查看 index 与 local repositorty 的差别的。 
git diff HEAD:        是查看 workspace 和 local repository 的差别的。
(HEAD 指向的是 local repository 中最新提交的版本)

3.通过git checkout -- file,可以丢弃工作区的修改

$ git checkout -- readme.txt

有以下两种情况

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和修改前一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到和暂存区一样的状态。

4.通过git reset命令可以把暂存区的修改撤销掉(unstage),重新放回工作区

readme.txt作了修改并且已经添加到暂存区后,但是不想提交到版本库,需要撤销add

 git reset HEAD readme.txt

5.删除文件

test.txt添加到版本库后,在本地做了删除

1.确实要删除,通过git rm命令从版本库中删除该文件,并且git commit

git rm test.txt

git commit -m "remove test.txt"

2.删错了,把误删的文件从版本库恢复:

git checkout -- test.txt

 git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

远程仓库Github

1.配置自己的Github

创建SSH Key,在用户主目录下的.ssh目录创建id_rsaid_rsa.pub两个文件

ssh-keygen -t rsa -C "youremail@example.com"

登陆GitHub,打开“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key里粘贴id_rsa.pub的内容

2.本地库推送到远程库

如果还没有本地库,需要按上面的步骤创建本地库,只有第一次推送时需要加 -u

git remote add origin https://github.com/xxxx.git

git push -u origin master

3.远程库克隆到本地库

git clone git@github.com:xxxx.git

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

分支管理

HEAD指向当前分支。master指向提交,新建分支dev并做了新提交。

1.创建分支

git checkout -b dev

-b参数表示创建并切换,相当于以下两条命令:

git branch dev
git checkout dev

2.通过git branch命令,查看当前分支

git branch

 3.通过git checkout命令,切换分支

在dev分支做了add和commit操作

切换回master分支,HEAD指针指向master

git checkout master

 

3.通过git merge命令,合并分支

 git merge dev

 

 

4.通过git branch -d命令,删除分支

git branch -d dev

4.分支冲突:

在两个分支做了不同的修改,使用git merge dev时因为冲突无法合并

使用git status查看哪个文件发生冲突

git status

使用git diff查看两个冲突文件内容

git diff

解决:把Git合并失败的文件手动编辑为我们希望的内容,再提交。

注意此时dev分支的内容未变,只是看起来与master合并,此时使用merge无效,删除分支即可。

git branch -d dev

 

注:而如果此时继续在dev提交,feature指针往后移动,则又会冲突。

若此时想要删除分支dev,需要使用参数 -D

git branch -D dev

以图的形式显示分支加参数 --graph,后两个分别表示一行显示和简写commit id

git log --graph --pretty=oneline --abbrev-commit

5.分支合并策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

合并dev分支时使用--no-ff参数,表示禁用Fast forward,表示因为要加入新的commit,所以需要 -m

加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并

git merge --no-ff -m "merge with no-ff" dev

6.临时修复bug

在dev分支工作过程中,当前工作区的工作没有完成不能提交,但是需要在工作区修改bug提交

修改bug需要在master创建新分支,并使用 --no-ff合并

即临时保存并清空当前工作区的内容,在工作区修复bug后,再把之前工作区的状态恢复,继续工作

使用git stash命令,可以把当前工作区保存

git stash

 使用git stash list命令,查看当前保存的工作区

git stash list

工作区恢复

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

git stash apply

git stash drop

也可以指定恢复多个保存中的某一个 

git stash apply stash@{0}

二是用git stash pop,恢复的同时把stash内容也删了:

git stash pop

7.使用feature分支开发新功能

开发新功能时从dev创建feature分支,加入新功能后与dev分支合并

但是如果没等合并就不再需要该功能,需要强制删除该分支

git branch -D feature

8.多人协作 

从远程仓库克隆时,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

本地库与远程仓库相连 

git remote add origin git@github.com:xxxx.git

使用git remote,查看远程库的信息

git remote
origin

使用git remote -v,显示更详细的信息

git remote -v
origin  git@github.com:xxxx.git (fetch)
origin  git@github.com:xxxx.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送

推送master分支

git push origin master

推送dev分支

$ git push origin dev

抓取 

从远程仓库克隆,只会抓取远程origin的master分支

git clone git@github.com:xxxx.git

从远程origindev分支创建本地dev分支(创建前需要git pull)做了add和commit操作后,推送到远程仓库

git pull
git checkout -b dev origin/dev
git push origin dev

 而如果其他人在自己的本地dev分支做了修改要推送时,就会提示冲突

解决

首先设置本地dev分支与远程origin/dev分支的链接

git branch --set-upstream-to=origin/dev dev

然后用git pull把最新的提交从origin/dev抓下来

git pull

本地合并,解决冲突(编辑所需的内容,commit),然后再推送

git add readme.txt
git commit -m "fix conflict"

git push origin dev

9.rebase

本地和远程均在C2的基础上做了修改

此时如果使用git merge,产生一个merge commit

然后使用git renase,让"mywork"分支历史看起来像没有经过任何合并一样,使用git gc对不需要的C5和C6进行垃圾回收

git renase命令等价于下面两条命令(因为git merge是在mywork分支,所以这里第一句没用,但是如果不在就需要第一句)

git checkout mywork
git rebase origin

冲突解决

rebase的过程中也会遇到冲突的问题,即在C3和C5中对同一个文件做了修改

此时使用下面两条命令进行git rebase时会提示冲突

git checkout mywork
git rebase origin

这里解释一下提示

查看冲突文件
git am --show-current-patch 

修改冲突文件
git add/rm <conflicted_files>
然后继续提交
git rebase --continue

跳过冲突文件
git rebase --skip

停止rebase并恢复之前的状态
git rebase --abort

标签管理

1.创建标签

对最新的commit打标签 
git tag v1.0

对某一commit id打标签 
git tag v0.9 f52c633

对某一commit id打标签,并指定说明信息
git tag -a v0.1 -m "version 0.1 released" 1094adb

 2.查看标签

使用命令git tag列出所有的标签

git tag

使用命令git show查看标签的信息

git show <tagname>

3.标签推送到远程

因为创建的标签都只存储在本地,不会自动推送到远程。

使用命令git push origin <tagname>,推送某个标签到远程

git push origin v1.0

推送全部尚未推送到远程的本地标签

git push origin --tags

4.删除标签

删除本地标签

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

使用参数 -d 删除本地标签

git tag -d v0.1

删除远程标签

如果标签已经推送到远程,先从本地删除:

$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)

然后,从远程删除。

$ git push origin :refs/tags/v0.9

5.注意

标签总是和某个commit挂钩。

如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

使用Github

  • 在GitHub上,可以任意Fork开源仓库;

  • Fork后的仓库才有读写权限;

  • 可以推送pull request给官方仓库来贡献代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值