这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。
Git基本命令
配置
git config
-
不同级别的Git配置
--global, --system,--local 每个级别的配置可能重复,但是低级别的配置会覆盖高级别的配置
-
常见Git配置
用户名配置
git config --global user.name "liaoxingju"
git config --global user.email liaoxingju@bytedance.com
Instead of 配置
git config --global url.git@github.com:.insteadOf https://github.com/
Git命令别名配置
git config --global alias.cin "commit --amend --no-edit"
git remote
查看Remote
git remote -v
添加Remote
git remote add origin_ssh git@github.com:git/git.git
git remote add origin_http https://github.com/git/git.git
查看帮助
git remote -h
同一个Origin设置不同的Push和Fetch URL
git remote add origin git@github.com:git/git.git
git remote set-url --add --push origin git@github.com:my_repo/git.git
HTTP Remote
(1) URL:github.com/git/git.git
(2) 免密配置
内存:git config --global credential.helper 'cache --timeout=3600'
硬盘:git config --global credential.helper "store --file /path/to/credential-file" 不指定目录的情况默认是~/.git-credentials
将密钥信息存在指定文件中,具体格式:${scheme}://${user}:${password}@github.com
SSH Remote
(1) URL:git@github.com:git/git.git
(2) 免密配置
SSH 可以通过公私钥的机制,将生成公钥存放在服务端,从而实现免密访问
目前的Key的类型四种,分别是dsa、rsa、ecdsa、ed25519.默认使用的是rsa,由于一些安全问题,现在已经不推荐使用dsa和rsa了,优先推荐使用ed25519
ssh-keygen -t ed25519 -C "your_email@example.com" 密钥默认存在~/.ssh/id_ed25519.pub
提交代码
git add
将工作区代码提交至暂存区
git commit
将暂存区内容写入本地仓库
git commit -m "add readme"
tree .git 观察objects文件变化
远端同步
拉取代码
clone
拉取完整的仓库到本地目录,可以指定分支,深度。
fetch
将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作。
pull
拉取远端某分支,并和本地代码进行合并,操作等同于git fetch + git merge,也可以通过git pull --rebase完成git fetch + git rebase操作;可能存在冲突,需要解决冲突。
推送代码
push
常用命令:
一般使用git push origin master命令即可完成
冲突问题:
(1) 如果本地的commit记录和远端的commit历史不一致,则会产生冲突,比如git commit --amend or git rebase都有可能导致这个问题.
(2) 如果该分支就自己一个人使用,或者团队内确认可以修改历史则可以通过git push origin master -f来完成强制推送,一般不推荐主干分支进行该操作,正常都应该解决冲突后再进行推送。
推送规则限制:
可以通过保护分支,来配置一些保护规则,防止误操作,或者一些不合规的操作出现,导致代码丢失.
常见问题
- 为什么我Fetch了远端分支,但我看本地当前的分支历史还是没有变化?
Fetch会把代码拉取到本地的远端分支,但是并不会合并到当前分支,所有当前分支历史没有变化。 - 为什么我明明配置了Git配置,但是依然没有办法拉取代码?
免密认证没有配;Instead Of配置没有配,配的SSH免密配置,但是使用的还是HTTP协议访问。
总结
本文讲解了如何配置git,如何在本地提交代码,以及如何将代码同步到远端,另外解决了一些git使用过程中常见的问题。