六一的部落格


关关难过关关过,前路漫漫亦灿灿。



代码管理, 版本控制


安装

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

  1. 创建文件夹

    1mkdir -p .ssh/saved
  2. 生成密钥

    1ssh-keygen
  3. 输入存放私钥路径: 不支持Home目录 ~

    /Users/<用户名>/.ssh/saved/github
  4. 得到公钥 github.pub 和私钥 github , 存放在 /Users/<用户名>/.ssh/saved/ 目录下

  5. 拷贝公钥到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

存在多个文件添加/删除/修改,在上次提交的基础上再次提交

不建议如此操作,提交前建议检阅改动

  1. 项目文件夹一式两份,A和A.BAK, 项目新版本B
  2. 删除文件夹A内所有代码

    不会删除.git,提交和同步记录均保留
    1rm -rf A/*
  3. 将B内的所有文件拷贝到A

    不会拷贝.git
    1cp -r B A
  4. 打开文件夹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

已推送过远端

  1. 重命名本地分支
    1git branch -m oldName newName
  2. 删除远端分支
    1git push --delete origin oldName
  3. 将本地分支推送到远端
    1git push origin newName
  4. 将本地分支和远端分支关联
    1git branch --set-upstream-to origin/newName

分支合并

合并过程中可能会产生冲突

git-scm

  1. 在iss53分支上开发新功能
    1git checkout master # 主分支
    2git checkout -b iss53
    3vim index.html
    4git commit -a -m 'added a new footer [issue 53]'
  2. 在hotfix分支上解决问题
    1git checkout master # 主分支        
    2git checkout -b hotfix
    3vim index.html
    4git commit -a -m 'fixed the broken email address'
  3. 在主分支上合并解决方案,删除hotfix分支
    1git checkout master
    2git merge hotfix
    3git branch -d hotfix
  4. 继续在分支iss53上开发新功能
    1git checkout iss53
    2vim index.html
    3git commit -a -m 'finished the new footer [issue 53]'
  5. 合并新功能到主分支,删除iss53分支
    1git checkout master
    2git merge iss53
    3git branch -d iss53

书签

-
gitignore
License

初识Git


代码管理, 版本控制


安装

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

  1. 创建文件夹

    1mkdir -p .ssh/saved
  2. 生成密钥

    1ssh-keygen
  3. 输入存放私钥路径: 不支持Home目录 ~

    /Users/<用户名>/.ssh/saved/github
  4. 得到公钥 github.pub 和私钥 github , 存放在 /Users/<用户名>/.ssh/saved/ 目录下

  5. 拷贝公钥到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

存在多个文件添加/删除/修改,在上次提交的基础上再次提交

不建议如此操作,提交前建议检阅改动

  1. 项目文件夹一式两份,A和A.BAK, 项目新版本B
  2. 删除文件夹A内所有代码

    不会删除.git,提交和同步记录均保留
    1rm -rf A/*
  3. 将B内的所有文件拷贝到A

    不会拷贝.git
    1cp -r B A
  4. 打开文件夹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

已推送过远端

  1. 重命名本地分支
    1git branch -m oldName newName
  2. 删除远端分支
    1git push --delete origin oldName
  3. 将本地分支推送到远端
    1git push origin newName
  4. 将本地分支和远端分支关联
    1git branch --set-upstream-to origin/newName

分支合并

合并过程中可能会产生冲突

git-scm

  1. 在iss53分支上开发新功能
    1git checkout master # 主分支
    2git checkout -b iss53
    3vim index.html
    4git commit -a -m 'added a new footer [issue 53]'
  2. 在hotfix分支上解决问题
    1git checkout master # 主分支        
    2git checkout -b hotfix
    3vim index.html
    4git commit -a -m 'fixed the broken email address'
  3. 在主分支上合并解决方案,删除hotfix分支
    1git checkout master
    2git merge hotfix
    3git branch -d hotfix
  4. 继续在分支iss53上开发新功能
    1git checkout iss53
    2vim index.html
    3git commit -a -m 'finished the new footer [issue 53]'
  5. 合并新功能到主分支,删除iss53分支
    1git checkout master
    2git merge iss53
    3git branch -d iss53

书签

-
gitignore
License