Git, GitHub使用记录

高亮颜色说明:突出重点
个人觉得,:待核准个人观点是否有误
高亮颜色超链接

速查

官方文档

*** Git - Reference
Git - 分支与合并
Git - Branching and Merging

GitHub Cheat Sheet

GitHub Git 备忘单 - GitHub Cheatsheets
GitHub Git Cheat Sheet - GitHub Cheatsheets

安装
配置工具

对所有本地仓库的用户信息进行配置

$ git config --global user.name "[name]": 对你的commit操作设置关联的用户名;
$ git config --global user.email "[email address]": 对你的commit操作设置关联的邮箱地址;
$ git config --global color.ui auto: 启用有帮助的彩色命令行输出;

创建仓库

当着手于一个新的仓库时,你只需创建一次。要么在本地创建,然后推送到 GitHub;要么 clone 一个现有仓库。

$ git init: 将现有目录转换为一个 Git 仓库;
$ git remote add origin [url]: 在使用过 git init 命令后,使用此命令将本地仓库与一个 GitHub 上的空仓库连接起来;
$ git clone [url]: Clone(下载)一个已存在于 GitHub 上的仓库,包括所有的文件、分支和提交(commits);

.gitignore 文件

有时一些文件最好不要用 Git 跟踪。这通常在名为 .gitignore 的特殊文件中完成。你可以在 github.com/github/gitignore 找到有用的 .gitignore 文件模板。

分支

分支是使用 Git 工作的一个重要部分。你做的任何提交都会发生在当前“checked out”到的分支上。使用 git status 查看那是哪个分支。

$ git branch [branch-name]: 创建一个新分支;
$ git switch -c [branch-name]: 切换到指定分支并更新工作目录(working directory);
$ git merge [branch]: 将指定分支的历史合并到当前分支。这通常在拉取请求(PR)中完成,但也是一个重要的 Git 操作。
$ git branch -d [branch-name]: 删除指定分支;

进行更改

浏览并检查项目文件的发展

$ git log: 列出当前分支的版本历史;
$ git log --follow [file]: 列出文件的版本历史,包括重命名;
$ git diff [first-branch]...[second-branch]: 展示两个分支之间的内容差异;
$ git show [commit]: 输出指定commit的元数据和内容变化;
$ git add [file]: 将文件进行快照处理用于版本控制;
$ git commit -m "[descriptive message]": 将文件快照永久地记录在版本历史中;
$ git checkout: 切换分支,或者检出内容到工作目录;

同步更改

将你本地仓库与 GitHub.com 上的远端仓库同步

$ git fetch: 下载远端跟踪分支的所有历史;
$ git merge: 将远端跟踪分支合并到当前本地分支;
$ git pull: 使用来自 GitHub 的对应远端分支的所有新提交更新你当前的本地工作分支。git pullgit fetchgit merge 的结合;
$ git push: 将所有本地分支提交上传到 GitHub;

重做提交

清除错误和构建用于替换的历史

$ git reset [commit]: 撤销所有 [commit] 后的的提交,在本地保存更改;
$ git reset --hard [commit]: 放弃所有历史,改回指定提交;

小心!更改历史可能带来不良后果。如果你需要更改 GitHub(远端)已有的提交,请谨慎操作。如果你需要帮助,可访问 github.community 或联系支持(support)。

术语表
  • git: 一个开源的分布式版本控制系统
  • GitHub: 一个托管和协作管理 Git 仓库的平台
  • commit 提交: 一个 Git 对象,是你整个仓库的快照的哈希值
  • branch 分支: 一个轻型可移动的 commit 指针
  • clone: 一个仓库的本地版本,包含所有提交和分支
  • remote 远端: 一个 GitHub 上的公共仓库,所有小组成员通过它来交换修改
  • fork: 一个属于另一用户的 GitHub 上的仓库的副本
  • pull request 拉取请求: 一处用于比较和讨论分支上引入的差异,且具有评审、评论、集成测试等功能的地方
  • HEAD: 代表你当前的工作目录。使用 git checkout 可移动 HEAD 指针到不同的分支、标记(tags)或提交

Git, GitHub使用记录

初识Git, GitHub

Git 是一个分布式版本控制系统, 可以用于记录文档内容在每次修改时的版本变化信息;
GitHub 是一个面向开源及私有软件项目的托管平台, 简单来说就是一个可以存放代码的地方;

Git_文件的三种状态.jpg
Git 工作流程_201908011512.png

version control, Git - Videos

  • Your Daily Tasks:

    • Create things
    • Save things
    • Edit things
    • Save the thing again
  • version control provides you clarity as to when you did it, why you did it, and what the contents of the change were, open for review at any time in the future.

  • $ git log --graph --decorate --abbrev-commit --all --pretty=oneline: a historical graphical representation that can be done even from the command line, showing when people branched files, when they merged them back together, who did what, when, on which date: all of these option switches, which at the moment,

  • Q: "a set of option switches"什么意思?

Git 基本命令for单人使用和多人协作_20211211.jpg

相关博文

使用Git遇到的问题记录

Git 本地与远程

通过VS Code使用Git, GitHub

Step 1. 安装 VS Code, 安装 Git;

注: 如果此前安装 Git 时, 在"Adjusting your PATH environment"这一步勾选的是"Use Git from Git Bash only"而没有将其添加至系统环境变量PATH中; 那么, 就需要在 VS Code 中设置 git.exe 路径, 即: “文件 | 首选项 | 设置"搜索"git path”, 设置git.path字段 - Visual Studio Code User and Workspace Settings;

Git: Path 
Git 可执行文件的路径和文件名。例如: C:\Program Files\Git\bin\git.exe (Windows)。
在 settings.json 中编辑

C:\Users\username\AppData\Roaming\Code\User\settings.json
{
    "files.autoSave": "afterDelay",
    "update.enableWindowsBackgroundUpdates": false,
    "update.mode": "none",
    "telemetry.enableTelemetry": false,
    "update.showReleaseNotes": false,
    "telemetry.enableCrashReporter": false,
    "terminal.integrated.shell.windows": "C:\\windows\\System32\\cmd.exe",
    "git.path":"D:\\Program Files\\Git\\bin\\git.exe",  # 新增的一行
    "window.menuBarVisibility": "default",
    "python.pythonPath": "D:\\OtherProgramFiles\\Anaconda3\\envs\\my_cpu_py3\\python.exe"
}
Step 2. 创建 GitHub 远程代码存储库(Create a new repository);
GitHub_step 1 create a new repository01_20211211.jpg
Step 3. VS Code 创建本地项目 local_origin, 并 “初始化 Git 仓库”;
  • $ git init
  • $ git commit -m "first commit"
  • 通过创建 .gitignore 文件排除掉不需要 Git 版本控制的文件和文件夹, 注意添加 正斜杠的相对路径;
Step 4. 处理本地与 GitHub 远程之间的授权登录;

参考Connecting to GitHub with SSH - GitHub Docs完成以下几项即可;

  • Checking for existing SSH keys
  • Generating a new SSH key and adding it to the ssh-agent
  • Adding a new SSH key to your GitHub account
  • Testing your SSH connection
  • Working with SSH key passphrases
Step 5. 将本地代码推送到远程代码存储库中;
  • $ git remote add origin git@github.com:myname/myrepo.git: 把本地代码存储库与远程代码存储库相关联;
  • $ git branch -M main: 重命名当前分支的名称为 main ; 使用 -M 表示强制重命名;
  • $ git push -u origin main: 由于远程代码存储库是空的, 第一次推送 main 分支时, 加上了 –u 参数, Git 不但会把本地的 main 分支内容推送到远程的 main 分支, 还会把本地的 main 分支和远程的 main 分支关联起来, 在以后的推送或者拉取时就可以简化命令;
  • $ git push origin main: 今后再次推送 main 分支时, 就不用加上 –u 参数了;
GitHub_step 1 create a new repository03_20211211.jpg
Step x. Git 文件操作;
Step x. Git 分支操作;

【VSCode教程】5分钟 GIT、GITHUB 分支的新建与合并_莺时桃桃的 Debug 日常-CSDN博客 20200315
本博文包含以下内容:

  • 1 更新本地分支 master
  • 2 本地创建分支 Debug
  • 3 本地分支 Debug 更新
  • 4 切换本地分支到 master, 提交更新到远程
  • 5 切换到 Debug, 提交更新到远程
  • 6 合并 Debug 分支到 master

问题记录

问题描述
  开始
原因分析:
  开始
解决方案:
  开始

在 VS Code 中连接 GitHub 远程时报错"ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory"

问题描述
  在VS Code中连接 GitHub 远程时报错"ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory \n Permission denied, please try again."
原因分析:
  通过cd /usr/bin/ssh-askpass命令会发现不存在该路径, 估计没有安装ssh-askpass;
解决方案:
  一种可能的解决方案是通过sudo apt install ssh-askpass命令安装ssh-askpass, 但因没有服务器的su权限未去尝试; 另一种解决方案是在 create the SSH key 时, 设置 SSH key passphrases 为空;

ssh: connect to host github.com port 22: Connection timed out.

问题描述
  ssh: connect to host github.com port 22: Connection timed out.
解决方案:
  打开文件 ~/.ssh/config,

$ vim ~/.ssh/config

  添加以下内容:

Host github.com
 Hostname ssh.github.com
 Port 443

git - ssh: connect to host github.com port 22: Connection timed out - Stack Overflow

Cannot activate the ‘Pylance’ extension because it depends on the ‘Python’ extension, which is not loaded.

问题描述
  Cannot activate the ‘Pylance’ extension because it depends on the ‘Python’ extension, which is not loaded.
原因分析:
  Pylance, Jupyter 扩展的版本与 Python 扩展的版本不兼容;
解决方案:
  删除文件 ~/.vscode/extensions/ms-python.python*, 安装匹配版本的 Python, Pylance, Jupyter 扩展; 并点击右上角的...设置 Auto Update Extensions 为 None;

vscode远程error 无法激活 “Pylance“ 扩展, 因为它依赖于未加载的 “Python“ 扩展_baidu_40840693的博客 20210914

通过PyCharm使用Git, GitHub

使用参考:

Step 1, 安装Git

  安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

git config --global user.name "xxx"  # 设置用户名
git config --global user.email "xxx@gmail.com"  # 设置用户邮箱
git config --list  # 检查配置信息

lu@Lenovo-PC MINGW64 /e/WorkSpace/Server_WorkSpace
$ git status
fatal: not a git repository (or any of the parent directories): .git

# mkdir tutorial  # 在当前路径下创建一个文件夹, 用于后续创建一个repository
# cd tutorial/
# git --version
# git status  # 查看当前工作状态
# git init  # Git仓库的初始化, 创建了一个repository
记录一些git相关命令
git status
# git add . 添加当前路径下的所有文件到缓存区
git add xxx.py yyy.py # 添加一个或多个文件到缓存区
git status
git commit -m "First initial commit"  # 提交至Git本地版仓库,并附上提交描述
git status

# 在GitHub上create a new repository
# set a new remote
git remote add origin https://github.com/user/repo.git
# verify new remote
git remote -v
> origin https://github.com/user/repo.git (fetch)
> origin https://github.com/user/repo.git (push)
git branch  # 查看分支
git push origin master  # 提交到远程仓库
Step 2, 创建1个本地仓库

  此前,在PyCharm中由于"File | Open… | Open File or Project"选中的是"OpenSourcePlatform"文件夹,因此通过"VCS | Enable Version Control Integration"来初始化Git仓库,会在当前的项目路径Server_WorkSpace/OpenSourcePlatform下创建一个名为.git的子目录,而我期望的是对Server_WorkSpace/OpenSourcePlatform/mmdetection进行版本控制,故需要先删除已经创建的本地仓库OpenSourcePlatform,才能在Server_WorkSpace/OpenSourcePlatform/mmdetection路径下创建本地仓库mmdetection;
  此时,创建本地仓库mmdetection,有两种方式:
  方式一:在Git Bash中,通过执行cd /e/WorkSpace/Server_WorkSpace/OpenSourcePlatform/mmdetectiongit init命令,创建一个名为.git的子目录;
  方式二:在PyCharm中"File | Open… | Open File or Project"选中mmdetection,通过"VCS | Enable Version Control Integration"操作。如果此前 在当前的项目路径Server_WorkSpace/OpenSourcePlatform/mmdetection下没有一个名为.git的子目录,则该操作会在当前的项目路径Server_WorkSpace/OpenSourcePlatform/mmdetection下创建一个名为.git的子目录;如果此前 在当前的项目路径Server_WorkSpace/OpenSourcePlatform/mmdetection下已经存在一个名为.git的子目录,则该操作启用了版本控制集成功能;

MMDet_初始化Git仓库.jpg
MMDet_Deployment_Configuration_Connection设置.jpg
MMDet_Deployment_Configuration_Mappings设置.jpg
MMDet_Deployment_Configuration_Excluded Paths设置.jpg
MMDet_VCS_Enable Version Control Integration之前.jpg
MMDet_VCS_Enable Version Control Integration设置.jpg
MMDet_VCS_Enable Version Control Integration之后.jpg
Step 3, 在PyCharm中执行commit操作
MMDet_Deployment_Configuration_Connection设置.jpg
MMDet_Deployment_Configuration_Mappings设置.jpg
MMDet_Deployment_Configuration_Excluded Paths设置.jpg
MMDet_初始化Git仓库.jpg
MMDet_VCS_Enable Version Control Integration之前.jpg  # File | Settings | Version Control | Directory设置-->Apply
MMDet_VCS_Enable Version Control Integration设置.jpg
在执行"VCS | Enable Version Control Integration"操作之前,此处显示的是"Unregistered roots";
MMDet_VCS_Enable Version Control Integration之后.jpg
在执行"VCS | Enable Version Control Integration"操作之后,此处不再显示"Unregistered roots";
MMDet_VCS_执行首次commit操作001.jpg
# 红色,表示在工作区;
# 绿色,表示在暂存区;
# 蓝色,表示文件有修改,位于暂存区;
# 文件名无颜色,表示文件位于本地仓库区或已经提交到远程仓库区;
MMDet_VCS_执行首次commit操作002.jpg  # 勾选了所有文件,并附上提交描述"the initial project version"
MMDet_VCS_执行首次commit操作003.jpg  # 执行commit操作时出现的1个弹窗提示,看来当时应该取消勾选"Check TODO";对于该弹窗提示,点击"Commit";
MMDet_VCS_执行首次commit操作004.jpg  # 文件commit之后,文件的颜色变成了无颜色;修改了此文件后,此文件的颜色变成了蓝色;
MMDet_VCS_执行首次commit操作001.jpg
MMDet_VCS_执行首次commit操作002.jpg
MMDet_VCS_执行首次commit操作003.jpg
MMDet_VCS_执行首次commit操作004.jpg

GitHub使用记录

官方文档

Hello World - GitHub Docs

GitHub项目协作中的pull, push

  PR是Pull Request缩写,Git/svn之类用的。比如GitHub上的项目,你pull下来,修改了部分代码之后再提交PR,然后管理员觉得你改的代码没毛病,管理员确认之后,这个项目某部分代码就改成你的了;在GitLab中,MR(Merge Request)好像是类似的意思;

  团队合作的时候,由于远程端的更改多余你的本地端,你应该 先pull 然后合并远程端后 再push。如果直接强制push会让远程端的代码跟你本地的保持一致,远程端多的部分就不见了。

  CRLF line separators CRLF行分隔符
  CRLF abbr. 回车换行符(carriage return/line feed)
  expand upon详细叙述
  expand up展开,扩大

git clone命令

  git clone https://github.com/user/repo_name.git之前会在当前目录下创建一个文件夹,名字就是项目的名字repo_name。然后 git 会先拉取元信息,放在.git 这个目录里;然后拉取对应的object,同样放在.git 里;最后根据元信息和 obj这些信息建立整个代码。在最后一步开始之前终止,相当于所有拉取的东西都在.git 里。如果git clone中途终止,直接删掉.git这个文件夹重新拉取就行,看样子你是 clone 不是 pull,讲道理可以把第一步创建的项目文件夹repo_name直接删除,不影响什么。
  一般情况下,git clone传输失败都会自动删除临时文件的,存储库目录也会被自动删除的。

*** Github 简明教程 | 菜鸟教程

克隆指定分支的命令git clone -b branch_name depository_addr

克隆某个指定分支到本地目录,然后在该目录下push时,对应的就是push到远端的对应分支。

  • git clone -b branch_name depository_addr表示克隆名为branch_name的这个分支;
  • 如果省略-b <branch_name>,则表示克隆默认的master分支;
例如, 在安装Detectron2时, 

# 克隆default的master分支, 安装最新版本的Detectron2
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

# 克隆v0.3分支, 安装v0.3版本的Detectron2
git clone -b v0.3 https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2
20210507 安装某个版本的Detetron2.jpg

使用GitHub遇到的问题记录

二级标题

  

待补充

  

待补充

  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值