Mac环境下的Git常用操作指令

473 阅读6分钟

一、Git工作目录下文件的状态

git工作目录下对文件的修改(增加,删除,更新)会存在几种状态, 这些修改的状态会随着执行git的命令而发生变化

image.png

  • git add (工作区 -> 暂存区)
  • git commit (暂存区 -> 本地仓库)
  • git push (本地仓库 -> 远程仓库)

二、第一次初始化操作

  • git init
  • git clone 仓库地址
  • git add .
  • git commit -m ‘first commit’
  • git remote add origin 仓库地址
  • git pull origin master
  • git push origin master # -f 强推

一次简单的clone流程

  • 新建本地仓库目录

  • ls cd 命令切换到新建的目录下

  • git clone 远端仓库地址

    image.png

三、查看仓库当前的状态

  • git status

四、查看历史记录

  • git log 查看所有commit记录(SHA-A校验,作者名称,邮箱,提交时间,提交说明)
  • git log -p -次数 查看最近多少次的提交记录
  • git log –stat 简略显示每次提交的内容更改
  • git log –name-only 仅显示已修改的文件清单
  • git log –name-status 显示新增,修改,删除的文件清单
  • git log –oneline 让提交记录以精简的一行输出
  • git log –graph –all –online 图形展示分支的合并历史
  • git log –author=作者 查询作者的提交记录(和grep同时使用要加一个–all–match参数)
  • git log –grep=过滤信息 列出提交信息中包含过滤信息的提交记录
  • git log -S查询内容 和–grep类似,S和查询内容间没有空格
  • git log fileName 查看某文件的修改记录

五、分支相关操作

1、查看当前分支

  • git branch -v
  • git branch -r 查看远程分支
  • git branch -a 查看本地及远程分支

2、创建分支

  • git branch 分支名

3、切换分支

  • git checkout 分支名
  • git checkout -b 分支名 origin/基分支名 (指定分支创建并切换分支)
  • git checkout -b 分支名 (基于当前分支创建并切换分支)

4、合并分支

  • git merge 分支名 #用于合并指定分支到当前分支

    • 例如:将develop分支合入1.1.0分支:
    • 切换分支到1.1.0
    • 将develop分支合入1.1.0分支
    • git merge develop

合并冲突 (产生原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改)

  • 处理文件中冲突的地方
  • 将解决完冲突的文件加入暂存区(add)
  • 提交到仓库(commit)
  • git merge --abort 合并过程中放弃合并时使用该命令

5、删除分支

  • git branch -d 分支名 删除分支时, 需要做各种检查
  • git branch -D 分支名 不做任何检查, 强制删除

六、文件相关操作

1、添加操作 (工作区 -> 暂存区)

  • git add 文件名 将工作区的某个文件添加到暂存区
  • git add . 将当前工作区的所有文件都加入暂存区
  • git add -u 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件
  • git add -A 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件
  • git add -i 进入交互界面模式,按需添加文件到暂存区

简单图解说明:

image.png

2、提交操作 (暂存区 -> 本地仓库)

基础操作:

  • git commit -m '提交说明'
  • git commit -a -m '提交说明' 跳过缓存区操作,直接把工作区内容提交到本地仓库

经常需要从一个分支选择性的合并到另一个分支,可使用cherry-pick实现:

  • 单个commit合并 git cherry-pick commit_id
  • 多个连续commit合并
    • (包括两端) git cherry-pick commit_id..commit_idn
    • commit_id到commit_idn之间,非闭包 git cherry-pick (commit_id..commit_idn]
    • 挑选多个git cherry-pick commit_id commit_idx commit_idy
  • 合并过程中依次解决冲突后,继续合并 git cherry-pick --continue

3、推送操作 (本地仓库 -> 远端仓库)

  • git push origin 分支名 推送本地修改到远端分支
  • git push --force origin 分支名 本地与远端有差异, 要强推时使用
  • git push origin --delete 分支名 删除远端分支

4、回退操作

  • git reset HEAD^ 恢复成上次提交的版本
  • git reset HEAD^^ 恢复成上上次提交的版本,就是多个^,以此类推或用~次数
  • git reset --soft:只是改变HEAD指针指向,缓存区和工作区不变; image.png 如上图,soft参数是指将本地仓回滚到Y版本,但是暂存区和工作区保持不变。此时本地仓回滚到Y版本号commit完成的那一刻。
  • git reset --mixed:修改HEAD指针指向,暂存区内容丢失,工作区不变; image.png 这是默认参数。表示本地仓和暂存区,都回滚到Y版本号。工作区代码不受影响。
  • git reset --hard: 修改HEAD指针指向,暂存区内容丢失,工作区恢复以前状态;
    image.png 本地仓、暂存区、工作区,三区都回滚。

切记!!!工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了。

  • 使用场景1: 如何撤销上一次push?

    此时用--soft参数比较合适,只回滚本地仓到上一个版本,然后通过git push -f命令,撤销上次的push,最后更改好代码后重新push。步骤如下---

2步(可复制操作,注意改分支)
// ① 将本地仓回滚到上一个版本号
git reset --soft HEAD~1  
// ② 通过-f命令,将回滚后的版本号强制推送上去,
// 相当于撤销了最新的push
git push origin 分支名 -f  
// 修改代码
// 修改好后,重新add,commit,push即可。
  • 使用场景2: 如何撤销一次commit?

    如果要同时撤销暂存区的话,就用--mixed参数,如果要撤销工作区的修改就用--hard参数,否则用--soft最安全。

git reset --hard HEAD~1  
// 慎用--hard参数,除非你知道你自己在做什么

5、贮藏操作

  • 场景1: 想要切换分支,但是还不想要提交之前的工作,所以贮藏修改。
  • 场景2: 远端有修改,本地也有修改, 拉取远端代码时先贮藏本地修改。
  • git stash list 查看贮藏的内容
  • git stash apply On branch master 将贮藏的内容应用到指定的分支

七、总结

Git工作流程图

image.png

命令如下

  • clone(克隆): 从远程仓库中克隆代码到本地仓库
  • checkout(检出): 从本地仓库中检出一个仓库分支
  • add(添加): 在提交前先将代码提交到暂存区
  • commit(提交): 提交代码到本地仓库
  • fetch(抓取): 从远程库抓取到本地仓库, 不进行任何的合并操作
  • pull(拉取): 从远程库拉取代码到本地库, 自动进行合并(merge)
  • push(推送): 将修改后的代码推送到远程仓库