GIT在linux上的应用

本文详细介绍了Git的工作流程,包括初始化项目、配置用户信息、文件权限监听、修改配置、SSH免密配置以及常见命令的使用。还涵盖了如何处理分支、合并冲突、忽略文件、解决版本回退等问题,并提供了SSH配置以实现远程仓库的免密登录。此外,文章还讨论了如何在开发中应用Git,如创建和管理分支,以及如何解决开发过程中遇到的各种情况。

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

git简单介绍:
工作区(add)->stage/index/暂存区/缓存区(commit)->分支(仓库)
所谓切换版本,就是把git的HEAD指针指向了某个版本

一、初始化项目

git init

二、配置基本设置

git config --global user.name "heliang5241"
git config --global user.email "1960050004@qq.com"

三、文件权限监听

在初始化的项目里面,原因是如果修改用户权限后,git也会认为文件有变化,所以如果使用chown -R www 会使全部文件发生变化,会把全部文件提交一遍或者在pull合并分支时候可能会产生冲突

cd .git
vi config
filemode = false;

四、修改配置

Tip:如果是centos8系统,就需要配置

修改/etc/ssh/ssh_config文件,在Host *条目下添加 IPQoS=throughput
Host *    
    IPQoS=throughput

五、ssh免密配置

应用于git仓库,不适用于生产环境
1.客户端执行命令:

cd /root/.ssh
ssh-keygen -t rsa -C "邮箱"
// 这时候会生成公钥(id_rsa)和私钥(id_rsa.pub)

// 公钥导入服务器(注意用户名)
ssh git@192.168.56.101 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

2.服务端打开RSA认证:

vim /etc/ssh/sshd_config

// 内容如下
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

// 重启服务
which sshd
sshd路径 restart

3.服务端修改权限

chmod 700 /home/用户名/.ssh
cd .ssh
chmod 600 authorized_keys 

4.客户端重新克隆代码

git clone git@192.168.56.101:/home/data/git/gittest.git

六、Git开发常用命令

获取某个分支

// 关联远程仓库
git remote add origin git@server-name:path/repo-name.git
// clone会自动关联远程仓库
git clone -b 分支名 用户名@远程仓库地址

git pull的日常作用
git pull = git fetch + git merge

// 1.把远程仓库的分支拉下来并且合并当前版本分支,也就是更新
// 2.当无冲突时并且没有add的时候不会覆盖,所以很适合前后端分离
// 3.也可用于直接覆盖本地的修改
git pull 远程服务器名 分支名     
// 例子:
git pull origin newindex

七、Git开发常用忽略文件

// 部分非必要文件经常会被修改,这种文件要对其进行忽略(以phpstorm为例)
touch .gitignore
vim .gitignore

// 内容示例如下
abc.txt  # 屏蔽abc.txt这个文件
*.txt  # 屏蔽txt后缀的文件
test/  # 屏蔽test文件夹下的文件

git push origin newindex

八、从版本库拉下来不生效

// HEAD表示当前版本,回退到当前版本,HEAD^上一个版本,HEAD^^上上个版本
git reset --hard HEAD

九、克隆某个分支

git clone -b 分支名 远程仓库 -文件名

十、git还原

// 把工作区某个文件还原(未add的文件),被删除文件也能恢复
git checkout 文件路径
// 把某个文件从暂存区(stage)移除,保留物理文件
git rm --cache 文件名
// 把某个文件从暂存区和物理文件移除
git rm --f “文件路径”
// 清空暂存区的所有数据
git reset HEAD
// 回退到某个commit版本,通过git log 获取commitID,只要有未来版本的commitID,就还可以回到未来的版本,可以通过git reflog来查询
git reset --hard commitID
// 撤销当前分支所有修改,恢复到最近一次修改前干净的分支情况(慎用,会把composer的文件也清除)
git clean -d -fx
// 回到上一个commit的版本
git reset --hard commit_id
// 查看两个commit的差异
git diff commit-id1 commit-id2
// 强制同步远程仓库和本地一样
git push origin HEAD --force
// 把commit代码取消不改变本地代码
git reset --soft HEAD^
// 删除本地和远程仓库分支
git branch -D 分支名
git push origin --delete <BranchName>

十一、git里创建文件夹

// 一般空文件夹不能够被git检测并上传,需要添加一个空文件,如下:
cd 空文件夹
touch .gitignore

十二、工作中应用

// 溜溜工作中应用,克隆分支
git clone -b 分支名 远程仓库 -文件名

十三、进阶(额外知识)

大佬级别才用的东西
开发中的应用,修复bug:

// 开发环境尽量不要直接用主分支
// 一般分支命名
master     // 主分支
dev       // 开发分支
bug       // 修复bug分支
feature   // 推送远程分支
// 切换主分支
git checkout master
// 创建并切换新的分支
git branch -b dev
// 修改bug
git add .
git commit -m "修复bug"
// 切换到主分支合并dev分支
git checkout master
git merge --no-ff -m "信息" 分支名

1.分支的创建和使用

// 1.切换分支
git checkout xxx
git switch master     // 最新用法,反正用过不行
// 2.创建分支
git branch xxx
// 3.创建并切换分支
git checkout -b xxxv
git switch -c dev   // 最新用法,反正用过不行

2.合并分支

// 把某个分支合并到当前分支上
git merge 分支名

3.删除分支

git branch -d 分支名
git branch -D 分支名

4.提示语讲解

// 中文编译:当前master分支比远程的master分支要超前1个提交。
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
// 意思是某一个分支上执行了commit,如果在当前分支执行add->commit,就会连同另一个分支一起提交,如果两个分支修改了同一个文件,git merge便会产生冲突:
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

// 意思是当前分支修改了某个文件,但是你要切换分支时出现的提示。
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   hello.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt
	
// 当某个小伙伴最新提交与你本地文件有冲突时产生,先pull下来再push就可以解决
error: failed to push some refs to 'git@github.com:michaelliao/learngit.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.

// 原因是没有指定本地dev分支与远程origin/dev分支的链接
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

解决方法(建立关系):git branch --set-upstream-to <branch-name> origin/<branch-name>

5.分支冲突解决方法

// 查看冲突的文件
git log
both modified:   text.txt     // 冲突文件是text.txt
// 修改冲突文件
把文件打开,一般内容如下,修改成我们想要的内容保存。
dev
<<<<<<< HEAD                 // HEAD指向的是分支,所以这是当前分支(删除)
add something
=======                      // 这是分割线(删除)
test
>>>>>>> dev                  // 这是分支名(删除)

// 重新上传提交
git add .
git commit -m ""

// 查看分支合并图
git log --graph

6.解决当前分支修改文件,但要切换分支产生的问题

// (1) 还原修改
git reset HEAD
// (2) 暂存修改(也叫快照)
git stash
// (3) 暂存查看
git stash list
// (4) 暂存的还原与删除
git stash apply     // 恢复
git stash drop      // 删除
git stash pop      // 恢复的同时删除内容

7.复制一个分支的提交到当前分支

git cherry-pick 分支名     // 获取该分支最近一次提交
// 查看标签id(短得id)
git log --pretty=oneline --abbrev-commit
// 每一次提交后,分支名旁都会有一个字符串,例如:[dev 836cd23]
git cherry-pick 字符串     

8.git标签的应用

// 一般用来给某个commit后打上版本(一般是针对本地的)
git tag v1.0
// 展示标签(日期,作者等信息)
git show v0.9
// 删除标签
git tag -d v0.1
// 推送标签
git push origin --tags
// 删除远程标签
git push origin :refs/tags/<tagname>

9.忽略文件
针对各种框架和语言,git提供了参考:忽略文件大全

// 排除所有.开头的隐藏文件
.*
// 排除所有.class文件
*.class
// 不排除.gitignore和App.class
!.gitignore
!App.class
// 强制add
git add -f 文件名

10.骚操作

// 给命令取别名
git config --global alias.st status   // 把git status改成git st
git config --global alias.co checkout // git checkout改成git co
// Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

11.搭建一个git服务器
搭建一个git服务器

// 创建用户
useradd git
passwd git

// 创建文件夹
mkdir -p data/git/gittest.git
// 把该文件夹变成git仓库
git init --bare data/git/gittest.git
// 修改权限
chown -R git:git data/git/gittest.git/

客户端访问

git clone git@192.168.56.101:/home/data/gittest.git

十四、SSH配置

配置远程仓库git免密码登陆

1.创建公钥与私钥

ssh-keygen -t rsa

2.复制公钥到远程仓库

ssh-copy-id -i /root/.ssh/nw.pub git@192.168.2.4

3.编辑配置文件

vim /root/.ssh/config

内容如下:

Host 192.168.2.4
HostName 192.168.2.4
Port 22
User git
IdentityFile /root/.ssh/nw

// 可以无限添加

设置gitee免密码登陆

1.先拉项目

git clone http://xxx.com 项目名

2.修改配置

vim 项目名/.git/config

内容如下:

http://gitee.com/x/xx.git

替换为
http://用户名:密码@gitee.com/x/xx.git

显式免密码登陆

十五、更换远程登陆

// 1.移除久地址
git remote remove origin

// 2.添加新地址
git remote add origin https://gitee.com/kira520/myproject.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值