Getting started with Git👀
约 2288 个字 43 行代码 预计阅读时间 8 分钟
Set your username👀
name
替换为
Caching credentials👀
建议直接用
ssh
克隆
- 使用
HTTPS
克隆仓库时,可以使用凭据帮助程序在 Git 中缓存 GitHub 凭据- 如果是使用
ssh
克隆仓库,则不需要凭据帮助程序
Git passordwords👀
- 一般在使用
HTTPS
克隆仓库时,会要求输入 GitHub credentials (用户名和密码) - 但此时的用户名密码并非 GitHub 账户密码,而是 GitHub personal access token
- 可以通过配置
Git
cache credentials 来避免每次都要求输入 GitHub credentials- 在配置凭据缓存后,当使用
HTTPS
拉取或推送时,Git 将自动使用缓存的 personal access token
- 在配置凭据缓存后,当使用
SSH and GPG keys👀
配置
ssh
公钥,可以在不输入 GitHub credentials 的情况下,与 GitHub 通信
- 查看公钥
id_rsa.pub
文件
macOS Keychain credentials👀
- 从 macOS 更新密钥链凭据仅使用内置到 macOS 中的
osxkeychain
凭据帮助程序手动配置了 personal access token 的用户- 还是建议使用
ssh
或者 GCM | Git Credential Manager
Git workflows | TODO👀
About remote repositories👀
关于远程仓库
- 远程 URL 是 Git 一种指示“您的代码存储位置”的绝佳方式
- 只能推送两类 URL 地址:
- HTTPS URL (例如
https://github.com/user/repo.git
) - SSH URL (例如
git@github.com:user/repo.git
)
- HTTPS URL (例如
- Git 将远程 URL 与名称相关联,默认远程通常命为
origin
创建远程仓库👀
可以使用 git remote add
命令将远程 URL 与名称匹配
Example
git remote add origin
将 origin 与 REMOTE_URL
关联
Manage remote repositories👀
添加远程仓库👀
- 使用
git remote add
在终端存储存储库的目录中新增远程 git remote add
采用两个参数:- 远程名称 (如
origin
) - 远程 URL (如
https://github.com/user/repo.git
)
- 远程名称 (如
Example
Troubleshooting: Remote origin already exists
此错误消息表示尝试添加的远程与本地仓库远程名称相同
$ git remote add origin https://github.com/octocat/Spoon-Knife.git
> fatal: remote origin already exists.
三种解决方法:
1. 对新远程使用不同名称
2. 在添加新远程时,重命名现有远程仓库
3. 在添加新远程前,删除现有远程仓库
更改远程仓库 URL👀
git remote set-url
命令更改现有远程仓库 URL- 该命令采用两个参数:
- 现有远程仓库名称。如,
origin
··· - 远程仓库的新 URL。如:
- 若要更新为使用 HTTPS,URL 形如
https://github.com/USERNAME/REPOSITORY.git
- 若要更新为使用 SSH,URL 形如
git@github.com:USERNAME/REPOSITORY.git
- 若要更新为使用 HTTPS,URL 形如
- 现有远程仓库名称。如,
- 打开 Git Bash || 终端
- 将当前目录更改为本地仓库
- 列出现有仓库
- 使用
git remote set-url
命令将远程 URL 从SSH 更改为 HTTPS
- 验证
$ git remote -v # Verify new remote URL > origin https://github.com/USERNAME/REPOSITORY.git (fetch) > origin https://github.com/USERNAME/REPOSITORY.git (push)
下次将
git fetch
、git pull
、git push
执行到远程存储库时,系统将要求提供 GitHub 用户名和密码。
可以使用 GitHub 凭据帮助程序,以便 Git 每次与 GitHub 通信时都会记住你的 GitHub 用户名和 personal access token
- 打开 Git Bash || 终端
- 将当前目录更改为本地仓库
- 列出现有仓库
- 使用
git remote set-url
命令将远程 URL 从 HTTPS 更改为 SSH
- 验证
$ git remote -v # Verify new remote URL > origin git@github.com: USERNAME/REPOSITORY.git (fetch) > origin git@github.com: USERNAME/REPOSITORY.git (push)
下次将
git fetch
、git pull
、git push
执行到远程存储库时,系统将要求提供 GitHub 用户名和密码。
可以使用 GitHub 凭据帮助程序,以便 Git 每次与 GitHub 通信时都会记住你的 GitHub 用户名和 personal access token
重命名远程仓库👀
- 使用
git remote rename
命令重命名现有远程 git remote rename
命令采用两个参数:- 现有远程名称(如 original)
- 远程的新名称(如 destination)
删除远程仓库👀
- 使用
git remote rm
命令从存储库中删除远程 URL。 - 该命令采用一个参数:
- 远程名称(例如 destination)
从存储库中删除远程 URL 只会取消本地和远程存储库的链接。 它不会删除远程存储库
git push
👀
git push
会将本地仓库的内容推送到远程仓库git push
命令采用两个参数:- 远程仓库的名称 (如
origin
) - 要推送的分支的名称 (如
main
)
- 远程仓库的名称 (如
git push
命令的默认行为是将本地分支推送到与之关联的远程分支- 例如,如果本地分支为
main
,则git push
将自动推送到远程分支origin/main
- 可以使用
git push
命令的--set-upstream
标志将本地分支与远程分支关联起来git push --set-upstream origin main
- 可以使用
git push
命令的--force
标志强制推送到远程分支git push --force origin main
- 可以使用
git push
命令的--all
标志推送所有分支git push --all origin
Associate text editors👀
- 配置
git config
中的core.editor
选项,可以将文本编辑器与 Git 关联
Handle line endings | TODO👀
To avoid problems in your diffs, you can configure Git to properly handle line endings.
Ignoring files👀
- 即配置
.gitignore
文件- 如果在配置前已经提交了某些文件,那么这些文件将会被追踪,即使在
.gitignore
中配置了忽略它们
可以使用git rm --cached FILENAME
命令来取消追踪这些文件
.gitignore
中使用正则表达式匹配文件
在 .gitignore 文件中,每一行的忽略规则的语法如下:
- 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
#
标识注释,可以使用反斜杠进行转义- 可以使用标准的 glob 模式匹配。所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
- 以斜杠 “/” 开头表示目录;”/” 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;
- ”/” 开始的模式匹配项目跟目录;
- 如果一个模式不包含斜杠,则它匹配相对于当前
.gitignore
文件路径的内容,如果该模式不在.gitignore
文件中,则相对于项目根目录
- ”*” 通配多个字符
- 使用两个星号”**” 表示匹配任意中间目录,比如
root/**/file
可以匹配root/file
,root/dir1/file
或root/dir1/dir2/file
…
- 使用两个星号”**” 表示匹配任意中间目录,比如
- ”?” 通配单个字符
- ”[]” 匹配任何 一个 列在方括号中的字符。比如
[abc]
表示 a 或 b 或 c;- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如
[0-9]
表示匹配所有 0 到 9 的数字,[a-z]
表示匹配任意的小写字母
- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如
- ”!” 表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
- 如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用 “!” 规则是不起作用的
不使用 .gitignore 文件
Trivial commands | TODO👀
基本都可以用
-h
查看手册
fetch & pull
git pull
=git fetch
+git merge
- 建议优先使用
git fetch
,因为git pull
会自动合并,可能会导致冲突 pull
git pull
会将远程仓库的内容拉取到本地git pull <remote>
会将远程仓库的<remote>
分支拉取到本地git pull <远程主机名> <远程分支名>:<本地分支名>
会将远程仓库的<远程主机名>
的<远程分支名>
分支拉取到本地的<本地分支名>
分支并合并 (e.g.git pull origin main:version1
)- …
fetch
操作与pull
类似
clone
git clone <url>
会将远程仓库克隆到本地git clone <url> <dir>
会将远程仓库克隆到本地的<dir>
目录下git clone <url> -b <branch>
会将远程仓库的<branch>
分支克隆到本地git clone <url> -b <branch> <dir>
会将远程仓库的<branch>
分支克隆到本地的<dir>
目录下git clone <url> -b <branch> --single-branch
会将远程仓库的<branch>
分支克隆到本地,且只克隆该分支depth
选项:git clone <url> --depth <depth>
会将远程仓库克隆到本地,但是只克隆最近的<depth>
个提交
shallow
选项:git clone <url> --shallow-since=<date>
会将远程仓库克隆到本地,但是只克隆最近的<date>
之后的提交git clone <url> --shallow-exclude=<revision>
会将远程仓库克隆到本地,但是不克隆<revision>
之前的提交
…
branch & checkout
branch
git branch
或git branch -l
列出本地分支git branch -r
列出远程分支git branch -a
列出本地分支和远程分支git branch <branch>
创建分支git branch -d <branch>
删除分支;-D
强制删除git branch -m <old> <new>
重命名分支;-M
强制重命名git branch -u <remote>/<branch>
设置本地分支跟踪远程分支- …
checkout
git checkout <branch>
切换分支git checkout -b <branch>
创建并切换到分支git checkout -b <branch> origin/<remote branch>
创建并切换到分支,且跟踪远程分支- …
本文总阅读量:
次