最佳实践
初始化远程仓库
前提:需要在 github 中设置好账号或仓库的公钥。
1 2 3 4 5 6 7 8 9 10 11 12
| git init git config user.name "USERNAME" git config user.email "XXX@github.com"
touch README.md git add README.md git commit -m "init"
git remote add origin git@github.com:USERNAME/REPO.git git push -u origin master git remote show origin
|
1 2 3 4
| git remote add origin git@github.com:USERNAME/REPO.git git push -u origin master git remote show origin
|
比较差异
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 工作区修改 git diff git diff FILE_NAME
# 暂存区修改 git diff --cached git diff --staged
# 提交版本 git diff HASH_VALUE
# 指定文件指定提交的差异 git diff HASH_VALUE FILE_NAME
|
变基
- 优先选择
merge 。
- 不要在
master / main 分支上 rebase,这是默认分支。
- 总是在本地分支上 rebase,在远程也有的分支上进行
rebase 很可能会影响协作。
依赖仓库
推荐使用 subtree ,而不是 submodule 。
submodule : 仅保存子模块的引用而不保存其代码,无法修改提交到子模块仓库,未提供直接删除子模块的命令。
subtree : 主仓库会克隆一份依赖仓库代码,可对主仓库和依赖仓库进行修改提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git remote add SUBTREE-ORIGIN https://github.com/USERNAME/SUBTREE.git git remote show git subtree add --prefix=SUBTREE_FOLDER SUBTREE-ORIGIN master --squash git push
git subtree pull --prefix=SUBTREE_FOLDER SUBTREE-ORIGIN master --squash
git subtree push --prefix=SUBTREE_FOLDER SUBTREE-ORIGIN master
git subtree split --prefix=SUBTREE_FOLDER SUBTREE-ORIGIN master
git log SUBTREE-ORIGIN
|
误提交
cherry-pick 的目标场景用于处理本应在其他分支上进行的误提交。
1 2
| git cherry-pick HASHCODE
|
提交定位
主要用于通过二分查找定位某些修改是哪次提交引入的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git log --pretty=oneline
git bisect start HEAD 4d83cf
git bisect good
git bisect bad
git bisect reset
|
回退修改
未暂存
回退工作区修改,即未使用 git add xxx。
1 2 3 4 5 6 7 8 9 10 11
|
git checkout -- FILENAME
git restore FILENAME
git checkout -- .
git restore .
|
已暂存
回退暂存区修改,但未使用 git commit。需要先从暂存区撤销,再丢弃工作区修改:
1 2 3 4 5 6 7 8 9 10 11
|
git reset HEAD FILENAME
git restore --staged FILENAME
git restore FILENAME
git restore --staged . git restore .
|
已提交&未推送
1 2 3 4 5 6
| git log --oneline
git reset --soft HASHID
git reset --hard HASHID
|
已推送
不会删除历史提交。
1 2 3 4 5 6
| git log --oneline
git revert HASHID
git push origin BRANCHNAME
|