初识Git
2023年6月10日 2024年2月13日
代码管理, 版本控制
安装
macOS
- Xcode自带
- 使用homebrew安装较新版本
1brew install git
- 下载源码, 编译安装
官网下载git-2.41.0.tar.gz
1make install
验证
1git -v
配置
查看Git配置
1git config --list
配置Git账户
1git config --global user.name "enjoy61" 2git config --global user.email "[email protected]"
配置SSH
-
创建文件夹
1mkdir -p .ssh/saved
-
生成密钥
1ssh-keygen
-
输入存放私钥路径: 不支持Home目录
~
/Users/<用户名>/.ssh/saved/github
-
得到公钥
github.pub
和私钥github
, 存放在/Users/<用户名>/.ssh/saved/
目录下 -
拷贝公钥到Github
1cat ~/.ssh/saved/github.pub
iTerm保存SSH信息
1vi ~/.ssh/config
添加以下内容
1Host github.com 2HostName github.com 3User git 4IdentityFile ~/.ssh/saved/github
代理
-
设置
1# 使用代理端口替换20020 2git config --global https.proxy https://localhost:20020 3git config --global http.proxy http://localhost:20020
-
取消
1git config --global --unset http.proxy 2git config --global --unset https.proxy
中文乱码
1git config --global core.quotepath false
初始化项目
已在Github创建项目
场景一: 从Github克隆项目,上游信息自动配置
1git clone [email protected]:enjoy61/even.git
查看远端信息
1git remote -v
场景二: 手动配置上游信息
1git init 2git remote add cute [email protected]:enjoy61/even.git # cute为上游别名 3git fetch cute # 拉取上游内容,和Github项目同步
场景三: 首次提交本地项目到远端
1git init 2git add README.md # 添加管理文件 3git commit -m "first commit" 4git branch -M main 5git remote add origin [email protected]:enjoy61/even.git 6git push -u origin main
子模块管理
添加子模块
1git submodule add [email protected]:enjoy61/hugo-theme-even.git themes/even
从远端拉取项目时亦拉取子模块项目
1git clone --recursive [email protected]:enjoy61/even.git
设置项目同步链接
- SSH
1git remote set-url cute [email protected]:enjoy61/even.git
- HTTPS
push时需要验证,Github不再支持用户名和密码
1git remote set-url cute https://github.com/enjoy61/even.git
文件托管
添加
1git add file # 指定文件 2 3git add -A # 所有文件
删除
1git rm file
查看托管文件状态
1git diff
查看项目内文件状态
1git status
提交
提交当前改动
1git commit -m "first commit"
推送到远端
1git push
查看提交记录
1git log
删除历史提交
1# 查看提交记录 2git log # 最新提交 F E D C B,要删除F和E,记录D 3 4# 设置回溯目标 5git rebase -i D # 将F E的pick改为drop 6 7# 检查设置是否生效 8git log # 查看当前提交 D C B 9 10# 同步到远端 11git push cute master --force # 上游cute 分支master
存在多个文件添加/删除/修改,在上次提交的基础上再次提交
不建议如此操作,提交前建议检阅改动
- 项目文件夹一式两份,A和A.BAK, 项目新版本B
- 删除文件夹A内所有代码
不会删除.git,提交和同步记录均保留
1rm -rf A/*
- 将B内的所有文件拷贝到A
不会拷贝.git
1cp -r B A
- 打开文件夹A, 再次提交
1git add -A 2git commit -m "Comments" 3git push
分支
当前分支和分支列表
1git branch -a
切换分支
1git checkout main
创建分支
1git branch master
本地创建新分支后, 同步到远端
1git push --set-upstream origin master
创建并切换
1git checkout -b iss53
删除分支
- 本地
1git branch -d iss51
- 上游
1git push origin -d iss51
重命名分支
未推送到远端, 重命名即可
1git branch -m oldName newName
已推送过远端
- 重命名本地分支
1git branch -m oldName newName
- 删除远端分支
1git push --delete origin oldName
- 将本地分支推送到远端
1git push origin newName
- 将本地分支和远端分支关联
1git branch --set-upstream-to origin/newName
分支合并
合并过程中可能会产生冲突
git-scm
- 在iss53分支上开发新功能
1git checkout master # 主分支 2git checkout -b iss53 3vim index.html 4git commit -a -m 'added a new footer [issue 53]'
- 在hotfix分支上解决问题
1git checkout master # 主分支 2git checkout -b hotfix 3vim index.html 4git commit -a -m 'fixed the broken email address'
- 在主分支上合并解决方案,删除hotfix分支
1git checkout master 2git merge hotfix 3git branch -d hotfix
- 继续在分支iss53上开发新功能
1git checkout iss53 2vim index.html 3git commit -a -m 'finished the new footer [issue 53]'
- 合并新功能到主分支,删除iss53分支
1git checkout master 2git merge iss53 3git branch -d iss53
书签
- |
---|
gitignore |
License |