Github 命令行笔记汇总
第一节:基础命令
使用命令行操作Git
基础命令
git --version– 返回git版本,说明安装过gitgit clone <仓库地址>– 克隆git远程仓库到本地git status– 查看目前的git状态,处于哪个分支,是否同步,更改文件详情,暂存区情况等git add <文件名称>– 将文件更改提交到git暂存区git commit -m"Commit message"– 将暂存区的更改提交到本地git仓库git push– 将本地git仓库的更改提交到远程仓库git add .– 将所有修改的文件添加到暂存区git restore --staged <文件名>– 将已经存储到暂存区的文件取出来git commit -am"Commit message"– add和commit的结合体,这里只包括修改的文件,如果是新增的文件还需要使用git add .git pull– 从远程仓库拉取更新到本地
高级pull配置
-
git pull --rebase– 拉取更新时产生线性的提交记录,推荐多使用- 可以修改配置让git pull默认使用rebase:
git config pull.rebase true - 改回默认:
git config pull.rebase false
- 可以修改配置让git pull默认使用rebase:
文件操作
- 直接在文件资源管理器删除,使用
git rm <文件名>指明git不需要管理这个文件 git rm <文件名>– 将文件的删除操作移动到git的暂存区git mv <原文件> <移动后的地址>– 将文件的移动操作放置到git的暂存区git mv <原文件名> <新文件名>– 将文件重命名,并放置到git的暂存区
日志与历史
git log– 在终端查看git的提交记录日志,使用q键可以退出git reset --mixed <Commit id>– 将分支重置到历史提交记录中的某次提交中(需要强制推送)git restore <文件名>– 将文件的修改discard掉,取消文件当前的修改git show <Commit id>– 查看某次commit的详细信息git revert <Commit id>– 生成一个反向的操作,抵消修改的内容,实现回退效果git commit --amend– 修改最后一次提交的错误修改(本地方便使用,远程需强制推送)
第二节:分支管理
分支操作
git branch– 查看所有的本地分支git branch -a– 查看所有分支,包括远程分支git checkout -b <新的分支>– 创建新的分支,基于本地的当前分支创建git push --set-upstream origin <新的分支>– 把本地新创建的分支推送到远程仓库git switch <目标分支>– 把当前分支切换到目标分支git branch -d <目标分支>– 删除目标分支(如果未合并,使用-D强行删除)git push origin --delete <目标分支>– 删除远程仓库的分支git fetch– 将远程仓库的分支信息同步到本地git checkout <目标分支>– 让本地当前分支变为目标分支git merge <目标分支>– 把目标分支merge到当前分支
合并策略
Fast Forward
- 当feature分支要合并到main分支,且它们在一条线上时,merge就是单纯的把main的指针向前移动
- 使用命令:
git merge feature
Non Fast Forward
- 当两个分支不处于同一条线上时,merge会让分叉汇聚
- 使用命令:
git merge <目标分支>
No Fast Forward
- 即使有fast forward条件,也强行产生分叉
- 使用命令:
git merge --no-ff <目标分支>
Rebase
git rebase <目标分支>– 变基,把目标分支的内容合并到当前分支- 注意: 如果不处于fast forward状态,必须使用强制推送才能push到远程仓库
比较分支
比较commit的改动
git log <不显示这个分支的改动>..<显示这个分支有的改动>– 基于左边,看右边的分支相对于左边有哪些新的改动- 使用
...(三个点)会显示两边的差异
比较文件内容的不同
git diff <基于的分支>..<目标的分支>– 显示右侧分支相对于左侧分支的文件改动
特殊合并
git merge --squash <目标分支>– 把目标分支的多次提交squash为一个提交然后merge到当前分支(需要手动commit)
解决冲突
Merge冲突
- 编辑文本解决冲突后,提交到暂存区,再commit
Rebase冲突
- 解决冲突方式同上
- 使用
git rebase --continue继续rebase - 使用
git rebase --abort放弃本次rebase - 需要
git add <目标文件>,然后git rebase --continue
Cherry-pick
git cherry-pick <目标提交的哈希值>...– 将指定提交挑拣出来merge到当前分支
第三节:高级操作
Diff比较
git diff– 比较当前工作目录和暂存区的差异git diff --staged– 比较暂存区和本地分支的差异git diff HEAD– 比较工作目录和本地分支的差异
分支比较
两点比较
git diff <被比较分支>..<比较分支>– 显示右边分支相对于左边分支的差异
三点比较
git diff <被比较分支>...<比较分支>– 显示比较分支相对于被比较分支和比较分支的最近公共祖先的差异- Github提交PR时,默认是3点比较
Commit比较
git diff <commit_id> <commit_id>– 任选两个commit id进行比较
Stash
git stash– 将暂存的修改stash起来(先执行git add)git stash -a– 同时把工作区暂存的修改全部stash起来git stash list– 查看stash的信息git stash apply <stash的名字>– 取出stash但不删除git stash pop <stash的名字>– 取出stash并删除
Tag
git tag <tag名字>– 给当前分支打taggit tag <tag名字> <commit_id>– 给指定的提交打taggit push --tags– 将tag push到远端git tag -d <tag的名字>– 删除本地taggit push origin --delete <tag的名字>– 删除远端tag
Squash多个提交
使用reset
- mixed reset到要压缩的前一个分支
- 后面的提交消失但文件更改还在
- 直接commit相当于压缩
使用rebase
git rebase -i <commit_id>– 进入交互式rebase- 将pick换成
squash来压缩到第一次提交 - 功能强大但推送到远端需强制推送