Git学习笔记及一些问题(廖雪峰版)

本文详细介绍了Git版本控制系统的基本操作,包括配置SSHKey、创建本地仓库、关联远程库、文件推送、版本回退、分支管理、多人协作以及标签管理等核心内容。

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

创建一个仓库总体流程

配置SSH Key

1.在Git bash中设置git的user name和email,有了就忽略此步

git config --global user.name "Liang"
git config --global user.email  "152xxxxxxxx@163.com"

2.生成SSH Key

 ssh-keygen -t rsa -C "152xxxxxxxx@163.com"

生成ssh key
3.查看是否生成,若有下面两个表示成功

$ cd ~/.ssh
$ ls
id_rsa  id_rsa.pub

4.复制id_rsa.pub的开头
在这里插入图片描述
5.在Github中的setting里面,将刚在复制的开头粘贴进去即可
在这里插入图片描述

创建本地仓库文件夹

1.创建版本库文件夹(mkdir一个文件夹)
2.cd到该文件夹中(可用pwd查看当前目录地址)
3.使用git init创建为仓库(可用ls-ah查看隐藏的目录)

添加远程库(与本地库关联)

4.在Github中创建一个仓库,最好名称和本地创建的相同,在bash中创建版本库的位置输入如下,已经存在会提示已经存在

$ git remote add origin https://github.com/Rxxx-l/learngit.git
fatal: remote origin already exists.

5.输入如下,就可以把本地库的所有内容推送到远程库上,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

$ git push -u origin master

6.刷新Github看到同步成功
在这里插入图片描述
7.可用命令查看远程库信息:

$ git remote -v

返回上一级目录命令为:

$ cd ..

PUSH文件到远程库

8.git add 文件,将文件放到暂存文件区

9.git commit -m “提交说明”,将文件提交到仓库中,可add多个文件后,一次提交多个文件
基本流程

10.push主分支到GitHub或Gitee

git push origin master

远程clone库

Clone自己的有SSHKey的库后,可以直接push,可省略上述添加库的步骤

$ git clone https://github.com/Rambo-l/gitskills
Cloning into 'gitskills'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 591 bytes | 3.00 KiB/s, done.

clone后push失败问题

我先用https clone我的库下来
在这里插入图片描述
添加东西后push出现:

$ git push origin master
remote: LiangBo: Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/liangbo1996/xxxCar/'

发现ssh的地址和https地址有区别的,我是添加的ssh key
在这里插入图片描述
所以先在本地删除远程的库

$ git remote rm origin

再用ssh地址连接远程库:

$ git remote add origin git@gitee.com:liangbo1996/xxxCar.git

后面就可以push了4.在仓库目录下创建自己的文件
版本回退及撤销修改

版本回退

1.先用git log查看提交记录
2.git reset --hard HEAD^回退一次,几个 ^就是回退几次,也可用–hard HEAD~n表示退n次,还可用–hard commit id退回到指定的版本)

撤消修改

1.命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
2.若要撤回已存入暂存区的文件,先git reset HEAD 当我们用HEAD时,表示最新的版本。再使用git checkout – file丢弃工作区的修改

删除文件

删除

在另外一台电脑上push origin master

1.登录设置用户名和邮箱先生成并在gitee或github上添加SSH KEY,然后克隆对应的仓库
2.在本地电脑上新建文件夹,名字最好和仓库相同,在git init一下创建成功

$ git init
Reinitialized existing Git repository in C:/Users/Administrator/Desktop/clone/note/.git/

3.远程关联仓库

git remote add  git@gitee.com:xxxxxx/note.git

4.查看是否关联

$ git remote -v
origin  git@gitee.com:xxxxxx/note.git (fetch)
origin  git@gitee.com:xxxxxx/note.git (push)

5.然后就可以push文件啦,第一次push时会提示设置密码,这是你push文件的时候要输入的密码,而不是github或gitee管理者的密码,直接敲回车可以不输入密码,以后推送也不用输入密码
6.不过如果两台电脑使用同一个账号去操作同一个远程库时,git push某一台电脑上的文件出现push失败的情况,如下:

$ git push origin master
To gitee.com:liangbo1996/note.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'gitee.com:liangxxxxxx/note.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

应该是远程库被另一台电脑修改更新过,查看报错信息提示使用git pull,我试了下:

$ git pull origin master
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (12/12), 25.27 MiB | 339.00 KiB/s, done.
From gitee.com:liangbo1996/note
 * branch            master     -> FETCH_HEAD
   abf0338..774410d  master     -> origin/master
Merge made by the 'recursive' strategy.
 "23-2019.09.07-\346\242\201\345\215\232.docx" | Bin 0 -> 374043 bytes
 "23-2019.11.2-\346\242\201\345\215\232.docx"  | Bin 0 -> 6910806 bytes
 "23-2019.12.9-\346\242\201\345\215\232.docx"  | Bin 0 -> 13764765 bytes
 "23-2019.9.27-\346\242\201\345\215\232.docx"  | Bin 0 -> 525329 bytes
 "23-20191115-\346\242\201\345\215\232.docx"   | Bin 0 -> 952749 bytes
 "23-20191129-\346\242\201\345\215\232.docx"   | Bin 0 -> 15609488 bytes
 "23-\346\242\201\345\215\232-20191220.docx"   | Bin 0 -> 1649794 bytes
 liangbo.docx                                  | Bin 0 -> 476244 bytes
 8 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "23-2019.09.07-\346\242\201\345\215\232.docx"
 create mode 100644 "23-2019.11.2-\346\242\201\345\215\232.docx"
 create mode 100644 "23-2019.12.9-\346\242\201\345\215\232.docx"
 create mode 100644 "23-2019.9.27-\346\242\201\345\215\232.docx"
 create mode 100644 "23-20191115-\346\242\201\345\215\232.docx"
 create mode 100644 "23-20191129-\346\242\201\345\215\232.docx"
 create mode 100644 "23-\346\242\201\345\215\232-20191220.docx"
 create mode 100644 liangbo.docx

然后再git push就可以了(这里我pull了两遍,第一遍没成功,若一次失败,可以多pull几遍试试):

$ git push origin master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 2.21 KiB | 2.21 MiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:liangbo1996/note.git
   774410d..7170ec6  master -> master

7.git pull命令用于从另一个存储库或本地分支获取并集成(整合)。git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。相当于:

$ git fetch origin
$ git merge origin

8.git pull失败,若是本地库是创建的而不是克隆的两个库git pull 会出现:

$ git pull origin master
From gitee.com:liangbo1996/xxxCar
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

解决方法允许合并不相关的库:

$ git pull origin master --allow-unrelated-histories
From gitee.com:liangbo1996/xxxCar
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.en.md | 36 ++++++++++++++++++++++++++++++++++++
 README.md    | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 README.en.md
 create mode 100644 README.md

error: Your local changes to the following files would be overwritten by merge解决

报错

error: Your local changes to the following files would be overwritten by merge:

新修改的代码的文件,将会被git服务器上的代码覆盖,若不想覆盖:

git stash
git pull origin master
git stash pop

后面再add,commit,push就行了

分支管理

创建与合并分支

1.如下图,master为主分支,原来的Head是指向master,当创建新分支dev时,Head指向dev,从现在开始每次提交dev指针会向前移动。
在这里插入图片描述
2.当需要合并dev和master时,只需将master指向dev的当前提交,完成合并
3.合并完分支后,也可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支
4.创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

5.git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

6.列出所有分支,当前分支前面会标一个*号

$ git branch
* dev
  master

7.在分支上正常提交,切换为主分支master,查看文件发现不是刚才dev的内容

$ git checkout master
Switched to branch 'master'

在这里插入图片描述
8.git merge 合并分支,合并完用git branch -d dev删除分支

$ git merge dev
Updating d4b5c02..5c3d1f8
Fast-forward
 readme.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

9.切换分支使用git checkout branch,而前面讲过的撤销修改则是git checkout – 文件,同一个命令,有两种作用。实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:
创建并切换到新的dev分支,可以使用:

$ git switch -c dev

切换到指定分支命令:

$ git switch master

解决冲突

1.当在master主分支上对readme.txt进行修改提交,在feature1分支上也对readme.txt进行修改提交,这样合并时Git会报在readme.txt上发生冲突

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

2.可以用Git status查看冲突
3.cat 文件,查看文件发现,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

$ cat readme.txt
Git is distributed version control system.
Git is  a free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick on master.
=======
Creating a new branch is quick.
Switch to a new branch 'feature'.
>>>>>>> feature1

4.修改冲突文件为期望的内容,然后提交,用git log查看,最后删除feature1分支

$ git log --graph --pretty=oneline --abbrev-commit
*   c1ea991 (HEAD -> master) conflict fixed
|\
| * bd57ea1 (feature1) AND simple
* | fb3e246 & simple
|/
* 5c3d1f8 branch test
* d4b5c02 (origin/master) add test.txt
* 093611a commit to resposity
* 85f13c8 git tracks changes
* bc1851d understand how stages works
* 71919de add LICENSE
* 1dfdd8e append GPL
* 448cc65 add distributed
* d2f9743 wrote a readme file

分支管理策略

通常合并分支,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。下面实战一下–no-ff方式的git merge:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
在这里插入图片描述
上图为团队分支示意图

Bug分支

1.当在工作时需要完成另一项工作时,可以用git stash将当前工作现场隐藏

$ git stash
Saved working directory and index state WIP on master: 9326f26 merge with no-ff

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
修复Bug完毕后,用 git stash list查看刚才的工作。工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
2.你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

3.开发一个新feature,最好新建一个分支,如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

多人协作

1.git clone项目到本地,这是只看得到master主分支
2.要在dev分支上开发,就必须创建远程origin的dev分支到本地,于用这个命令创建本地dev分支:

$ git switch -c dev origin/dev
Switched to a new branch 'dev'
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

3.提交自己的文件到dev分支,然后推送到Github上的dev分支

$ git push origin dev

若别人最新提交和你试图推送的提交有冲突
1.首先,可以试图用git push origin 推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
5.如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

标签管理

创建标签

1.创建标签,默认在最新的commit上打标签:

$ git tag v1.0

2.如果想给指定commit打标签,先用git log查看commit id 然后用:

$ git tag vx.x f52c633(commit id)

3.可以用git show vx.x查看标签信息
4.还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字,如:

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

操作标签

1.删除标签

$ git tag -d v0.1

2.推送标签到远程

$ git push origin v1.0

3.一次性推送全部尚未推送到远程的本地标签

$ git push origin --tags

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

$ git tag -d v1.0

5.然后,从远程删除,删除命令也是push,格式如下,这里有可能因为网络原因会报错,多试几次

$ git push origin :refs/tags/v1.0

Git命令

git add 文件,添加文件到暂存区
git commit 文件,提交文件到仓库
git status,查看当前仓库状态
git diff ,查看修改,git diff HEAD – 文件 查看工作区文件和版本库中的文件区别
git log,查看修改记录
cat 文件 ,查看文件内容,
git checkout – 文件, 撤消修改
git branch,查看分支
git branch ,创建分支
git checkout 或者git switch ,切换分支
git checkout -b 或者git switch -c ,创建+切换分支
git merge ,合并某分支到当前分支
git branch -d ,删除分支
git reset --hard HEAD^版本回退
rm 文件, 删除文件

Git手册

廖老师教程中的Git手册,可以查命令什么的
Git 手册.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RambOoO_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值