TongXu-Server

Git

git安装

git clone https://github.com/git/git
sudo pacman -S git

配置

#使用--global所有的项目都会使用这里配置的用户信息,保存在用户主目录下
#不使用--global,保存在.git/config文件中
git config --global user.name "yourname"
git config --global user.email "test@example.com"
git config --global core.editor "vim"

#可以查看配置的信息
git config --list 

#可以直接修改配置文件
vim /etc/gitconfig
vim .gitconfig

#用于生成rsa密钥
ssh-keygen -t rsa -b 4096 -C "youremail@example.com"

工作流程

#克隆仓库,参与一个已有的项目,首先需要将远程仓库克隆到本地
git clone https://github.com/username/repo.git
cd repo 

#创建新分支,为了避免直接在main或master分支上进行开发,通常会城建一个新的分支
git checkout -b new-feature

#在工作目录中进行代码编辑,一边进行下一步的提交操作
git add filename //添加一个文件
git add .  //添加目录下的所有文件

# 提交更改,将暂存区的更改提交到本地仓库,并添加提交信息
git commit -m "Add new feature"

#拉取最新更改,在推送本地更改之前,最好从远程仓库拉去最新更改,以避免冲突
git pull origin main

#推送更改,将本地的提交推送到远程仓库
git push origin new-feature

#在PR审核后,可以将远程仓库的主分支合并到本地分支
git checkout main
git pull origin main
git merge new-feature

#如果不再需要新功能分支,可以将其删除
git branch -d new-feature
#或者可以从远程仓库中删除分支
git push origin --delete new-feature

基本概念

工作区

  • 工作区 就是你在电脑里能看到的目录
  • 暂存区 一般存放在.git目录下的index文件中,所以我们把暂存区有时也叫做索引
  • 版本库 工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库
# 暂存区的目录树会被重写,被main分支指向的目录树所替换,但是工作区不受影响
git reset HEAD

# 删除暂存区的文件,工作区不受改变
git rm --cached <file>

# 会用暂存区中全部文件替换工作区的文件
git checkout .
#回用暂存区中的指定文件替换工作区中的文件
git checkout -- <file>

#会使用HEAD指向的main分支中的全部文件替换暂存区以及工作区中的文件
git checkout HEAD .
#张使用HEAD指向的main分支中的指定文件替换暂存区以及工作区中的文件
git cheacout HEAD <file>
  • 选择性的将工作区中的文件修改添加到暂存区中
git add filename //将单个文件添加到暂存区中 
git add .		 //将工作区中的所有文件添加到暂存区中
git status       //查看那些文件在暂存区中
  • 版本库包含项目的所有版本历史快照
git commit -m "Commit message" //将暂存区中的更改提交到本地版本库
git log 					   //查看提交历史
git diff 					   //查看工作区的暂存区之间的差异
git diff --cached 			  //查看暂存区和最后一次提交的差异
  • 将本地版本库提交推送到远程仓库
git push origin branch-name
  • 从远程仓库获取更新
git pull origin branch-name
#或者
git fetch orgin branch-name
git merge origin/branch-name

仓库创建

  • 使用git init 创建
    • git的很多命令都需要在git的仓库中运行,所以git init是使用git的第一个命令。执行完git init会生成一个.git目录,该目录包含了资源的所有元数据,其他的项目目录保持不便。
#创建一个目录
mkdir my-project
cd my-project
#会使用当前目录作为git仓库,我们只需要使之初始化
git init

#使用指定目录作为git仓库,初始化后会在newrepo目录下出现一个名为.git的目录
git init newrepo
  • 使用git clone创建
    • 使用git clone从现有的git仓库中拷贝项目
#克隆仓库,使用仓库名称作为目录名称
git clone <repo>
#克隆到指定的目录中
git clone <repo> <directory>

分支管理

  • 查看分支
#查看本地所有分支
git branch
#查看远程仓库所有分支
git branch -r
#查看本地和远程仓库的所有分支
git branch -a
  • 创建分支
#创建新分支并切换到新分支去
git checkout  -b <branchname>
#切换分支
git checkout <branchname>
  • 合并分支
#合并分支
git merge <branchname>

#切换到分支main,并且合并feature-xyz分支
git checkout main
git merge feature-xyz
  • 解决合并冲突
#当合并遇到冲突,git会标记冲突文件,你需要手动解决冲突,打开冲突文件,按标记解决冲突。解决完成后提交
git add <conflict-file>
git commit
  • 删除分支
#删除本地分支
git branch -d <branchname>
#强行删除为合并的分支
git branch -D <branchname>
#删除远程分支
git push origin --delete <branchname>

远程仓库

#添加远程仓库
git remote add [shortname] [url]
git remote add origin git@github.com:yourname/reponame.git

#生成rsa密钥对,用于和github仓库进行ssh连接
#生成的~/.ssh/id_rsa.pub公钥复制到github用户设置里面的ssh&gpg keys里面
ssh-keygen -t rsa -C "youremail@example.com"

#测试连接
ssh -T git@github.com 


#创建一个远程仓库
#在github上创建一个仓库并将REAMDME.md文件推送到远程仓库
mkdir git-test-repo
cd git-test-repo
echo "Git test repo testing" >> README.md
git init 
git add README.md
git commit -m "add README.md file"
git remote add origin git@github.com:yourname/repo-name.git
git push -u origin main

#查看远程仓库
git remote   //查看当前配置有哪些远程仓库
git remote -v //可以看到每个别名的实际链接地址

#拉取远程仓库
git fetch 
git merge 
#或者
git pull

#删除远程仓库
git remote rm [别名]
git remote rm origin