Git学习

Git学习

缪雪峰git

所有的版本控制系统,只能跟踪文本文件的改动(因为文本文件时有编码的,建议使用UTF-8),图片,视频只能监控到大小,无法知道内容。

注:只要是二进制编码格式,都无法进行版本控制监控内容
初学必看: 工作区和暂存区

git安装

Debian或Ubuntu Linux,通过一条

sudo apt-get install git

老一点的Debian或Ubuntu Linux,要把命令改为

sudo apt-get install git-core

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可

git config 配置指令

git config 配置指令

git config 有system,global(用户级别),和local(当前仓库),三个设置从system–》global–》loacl 底层配置会覆盖顶层配置分别使用–system/global/loacl可以定位到配置文件

系统配置

git config --system --list

当前用户配置

git config --global --list

当前仓库配置

git config --local --list

git init创建版本库

mkdir testgit #创建一个空目录

cd testgit #进入此目录

git init #将目录变成Git可以管理的仓库

显示下面的提示,说明初始化成功

Initialized empty Git repository in /home/server/Gitrepositiry/learngit/.git/

git add commit使用

结合实践:

首先新建一个文件
ubuntu(windows直接右键创建编辑)

touch test.txt	#创建一个文本,要在testgit目录下,即git仓库中

vim test.txt		#随意编辑,如Hello Git!

git add test.txt	#将文件交给git管理

git commit -m add Git status Test		#将文件提交到仓库,并附加说明test

终端输出:
[master (root-commit) ad90cf0] test
 1 file changed, 2 insertions(+)
 create mode 100644 test.txt

git add [filename] #可以多次使用,添加多个文件,也可以git add .添加当前目录下所有文件

git commit -m [message] #提交时加上提交信息,方便历史查找

git commit --amend

git commit --amend #重写上一次的提交信息,包括提交信息

#进入编辑模式
小写i:在光标所在行位置停止不动开始写入内容
大写I:在光标所在行行首开始写入内容
小写a:在光标所在行当前字符后开始写入内容
大写A:在光标所在行行尾开始写入内容
小写o:在光标所在行下一行开始写入内容
大写O:在光标所在行上一行开始写入内容

#退出编辑模式
:w:保存文本
:q:退出编辑模式
:w!:强制保存,在root用户下即使文本只读也可以强制保存
:q!:强制退出,所有改动不生效
:wq:保存并退出

git status 查看状态

修改test文件内容

vim test.txt #修改test.txt文件

Hello Git!
Git status Test

git status #查看状态

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

显示 test.txt文件被修改

git diff test.txt #查看文件修改内容

diff --git a/readme.txt b/readme.txt
index 46d49bf..c1bbf93 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 Hello Git!
+Git status Test

最后一行显示为绿色,前有 ‘ + ’,是添加的内容

接下来再使用

git add 和 git commit -m

命令可将将文件再次提交

再次输入 git status

On branch master
nothing to commit, working tree clean

显示无文件需要修改

git log 查看历史记录

git log #查看提交记录

commit 后面的字符串是版本号,哈希值

commit 248877a79e025cd4ce46db31994b645ffbcac414 (HEAD -> master)
Author: ****
Date:   Fri Nov 12 11:17:27 2021 +0800

   add Git status Test

commit 3f1755237d1908a2d48dcfa879a3fd5ee295a214
Author: ****
Date:   Fri Nov 12 11:16:26 2021 +0800

    add Hello Git

git log命令显示从最近到最远的提交日志

git log --pretty==oneline

每条日志都只显示一行
多屏显示控制方式空格向下翻页 b向上翻页 q退出

git log --oneline

哈希值只显示部分

git reflog #查看命令历史,以便于找回回退前的版本

git checkout – 撤销

git checkout -- [file] #撤销工作区修改

此时尚未将文件添加到暂存区,手动删除,或者使用上述命令清楚该文件所有本次修改

若已经git add

git reset HEAD [file] #回退暂存区内容,返回状态到未git add时

若已经git commit到版本库

git reset --hard HEAD^ #回退到上一个版本,前提是尚未上传到远程仓库

git rm [file]

git rm [file] 删除文件

手动[rm]删除工作区文件,不会删除相应版本库文件

需要再进行 git add [file]git commit -m [message] 去同步删除版本库内容

git rm #删除工作区文件,并将这次删除放入暂存区

rm 删除文件,git commit提交信息,删除版本库文件

误删文件,版本库中还存在,可以通过

git checkout -- [file] #用版本库中的版本替换工作区的版本

git remote 远程

Git- 连接远程仓库

以github仓库为例

#git remote add 添加远程仓库
git remote add origin git@github.com:[你的GitHub账户名]/learngit.git

#查看当前远程仓库,根据名字删除
git remote -v

#删除当前配置的远程库地址,这里删除只是解除绑定,并不是物理删除
git remote rm origin


#本地关联远程仓库,推荐使用ssh方式。
#1.配置当前仓库的用户名,邮箱。配置全局config 后加 --global
git config user.name "***"
git confif user.email "***@**.com"
#2.生成密钥(SSH key),此处的邮箱只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。其一开始的初衷仅仅是为了便于辨识所以使用了邮箱。
#Gitee教程:https://gitee.com/help/articles/4181#article-header0
ssh-keygen -t rsa -C "your_email@**.com"

#按照提示完成三次回车,即可生成 ssh key,生成后,有信息告诉你位置,有私钥和公钥(**.pub)
将公钥中的内容添加的远程仓库的新建SSH key中。(设置中找)

#验证
#github
ssh -T git@github.com
#gitee
ssh -T git@gitee.com

#本地项目创建版本库
在项目跟目录下执行: git init
#连接远程库
#推荐使用ssh
git remote add origin git@github.com:yourName/repositoryname.git

git remote add origin https://github.com/yourName/repositoryname.git

#如果远程仓库中含有文件(Readme.md..),执行下面命令,没有跳过即可
git pull origin master
#上面命令执行未成功,试试  git pull --rebase origin master

git push 推送

使用命令git push -u origin master第一次推送master分支的所有内容,并与远程仓库绑定

下次提交只输入 git push origin master即可

git clone 克隆远程仓库

获取到远程仓库git地址后使用

git clone [远程仓库地址] #根据远程库克隆出一个本地仓库

Git支持多种协议,包括https,但**ssh协议速度最快**。

git checkout -b 创建并切换分支

git checkout -b [BranchName]

创建一个分支并将HEAD指针切换到此分支

相当于git branch [BranchName]

git checkout [BranchName]

git branch 查看当前分支

当前分支前面会有一个 * 号;

我们可以在分支上进行提交,未完成的文件;

完成之后git checkout master切回master,此时master是看不到分支修改的内容的

git merge 合并分支

git merge [BranchName]合并指定的分支到当前的分支

git branch -d 删除分支

git branch -d [BranchName] #删除指定的分支

git switch 切换分支

git switch -c [BranchName] #创建并切换到新分支

git switch master #切换到已有的master分支

git rebase 合并并取消分支

让分支历史看起来像没有经过合并一样

rebase

解决冲突

当两条分支在同一个节点,同一个文件内容不一样时,想要合并,我们需要解决冲突,使当前节点只保存一个版本内容

git status #告诉我们冲突的文件

冲突文件中,Git用<<<<<<<=======>>>>>>>标记出不同分支的内容

对冲突文件修改之后,git addgit commit提交修改,完成解决冲突

git branch -d [branch] #删除分支,防止之后操作失误

git log --graph #可以查看到分支合并图

gitk .

图形化查看当前文件夹下修改历史

git log .

查看最近几次历史日志。

分支管理策略

git 分支很强大,但是我们不能滥用分支。

master分支应仅用来发布新版本,平时不能在上面进行修改

创建dev分支作为开发使用的分支,

其他人各有各的分支,只在dev上进行合并

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

git进阶

reset、cherry-pick…其他操作总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值