Github命令行笔记汇总

Github 命令行笔记汇总

第一节:基础命令

使用命令行操作Git

基础命令

  • git --version - 返回git版本,说明安装过git
  • git 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 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名字> - 给当前分支打tag
  • git tag <tag名字> <commit_id> - 给指定的提交打tag
  • git push --tags - 将tag push到远端
  • git tag -d <tag的名字> - 删除本地tag
  • git push origin --delete <tag的名字> - 删除远端tag

Squash多个提交

使用reset

  • mixed reset到要压缩的前一个分支
  • 后面的提交消失但文件更改还在
  • 直接commit相当于压缩

使用rebase

  • git rebase -i <commit_id> - 进入交互式rebase
  • 将pick换成squash来压缩到第一次提交
  • 功能强大但推送到远端需强制推送
阅读剩余
THE END