Git 常用操作

一、拉取代码让我瞧一瞧

克隆指定分支/版本 (clone/reset/checkout)

git clone <仓库地址>

git clone <仓库地址> <目标文件夹名>

git clone <仓库地址> -b <分支名>

git clone <仓库地址> -b <分支名> <目标文件夹名>

git reset --hard <版本 ID>

git checkout <版本 ID>

更新代码 (pull)

git pull  从远程拉取更新

查看状态/日志 (status/log)

git status

git log

子模块拉取 (submodule)

子模块的信息保存在 .gitmodules 中

git submodule  查看自模块列表

git submodule deinit   ??

git submodule init  ??

git submodule update  --init <子模块名>  初始化子模块

git submodule update  <子模块名>  更新子模块

git submodule update --init --recursive  递归地更新所有子模块

Git 中submodule的使用,终于有人说明白了_Java斗帝之路的博客-CSDN博客

代码关键字搜索 (grep)

git grep <关键字>

将远程的变更拉到本地进行查看 (cherry-pick)

假设在某远程分支上有 “版本 1” ~ “版本 10” 共十次 Commit,我们希望把 “版本 5” ~ “版本 10” 的内容拉取到本地查看,可以按下面的步骤做

git checkout <版本 4>

git checkout -b <临时分支名>

git cherry-pick <版本 5>^..<版本 10> --no-commit

git restore --staged .

其中:

  • X^..Y 表示从 X 到 Y 之间的所有变更(包含 X 的变更)
  • --no-commit 表示置为 Stage (未 Commit) 的状态
  • restore --staged . 表示将所有 Stage 的文件变为 Unstage (未 Add) 的状态


二、牛马开始干活

分支操作 (branch)

git branch  查看本地分支

git checkout <分支名>  切换到某分支

git checkout -b <新分支名>  创建并切换到新分支

git branch -d  <分支名>  删除分支

git branch -D  <分支名>  强制删除分支

经典提交一把梭 (add, commit, push)

git add .

git commit -m "<描述信息>"

git push  推送到远程分支

git push --set-upstream origin <远程分支名>   创建远程分支并推送到该远程分支

删除/重命名文件 (rm/mv)

git rm -f <文件名...>

git mv <源文件> <目标文件>

查看更改内容 (diff)

git diff

git diff <文件名>

补丁导出导入 (diff/apply)

git diff > <补丁名>

git diff <版本ID> > <补丁名>  生成当前和某版本之间差异的补丁

git diff HEAD~1 > <补丁名>  生成当前和上 1 次提交之间差异的补丁

git apply <补丁名>  导入补丁

暂存本地更改 (stash)

当我们创建一个新的分支 dev,并且在新分支上修改了原文件,在我们没有提交到仓库的前提下,将分支再切换到 master 分支上,执行 git status ,可以看到 dev 操作的状态:(1)因为未 add 的内容不属于任何一个分支, 未 commit 的内容也不属于任何一个分支。 也就是说,对于所有分支而言, 工作区和暂存区是公共的。(2)你在 dev 分支修改了文件,但是你没有提交到仓库,实际上就是相当于你在本地手动修改了这个文件仓库并不能保存你做的改动,所以在 master 分支能看到文件被改动了(相当于你没用 dev 分支直接修改了这个文件一样)。

git stash  暂存本地修改

git pull  更新当前分支

git stash list  显示暂存的本地修改列表

git stash pop stash@{0}  还原某个暂存的本地修改

git stash clear   清空所有暂存的本地修改

git stash drop stash@{0}  删除第一个暂存的本地修改

git暂存本地修改 - 炽橙子 - 博客园

rebase

举个例子,如果从 develop 分支拉取出来一个 feature 分支,在开发 feature 分支的过程中,develop 分支(被别人)发生了修改,这时需要把当前的 feature 分支更新到最新,就需要 rebase

rebase 之后 push 到远程分支:

git checkout master    切回原来的分支,并更新

git pull

git checkout feature   切回刚才正在开发的分支,用 master 分支进行 rebase

git rebase master

git push --force origin feature    推到远程分支,必须加 force,不然会报错

P.S. 如果 rebase 前本地修改还没有 add/commit,则需要先 git stash 暂存本地变更,执行 rebase 之后再通过 git stash pop 恢复本地修改

 git rebase详解(图解+最简单示例,一次就懂)_风中一匹狼v的博客-CSDN博客_git rebase

[git] your branch is ahead of ... 解决办法_mandagod的博客-CSDN博客

git rebase后不能push问题 - JadeCicada - 博客园

Git push rejected after feature branch rebase - Stack Overflow

子模块更新 (submodule)

子模块的信息保存在 .gitmodules 中

git submodule update --init <子模块名>  确保子模块已经被拉取下来

cd <子模块目录>

git checkout <子模块版本ID>

cd <根目录>

git add <子模块目录>

git commit -m "<描述信息>"

git push


三、哎呀,我后悔了

丢弃本地修改/恢复文件 (checkout/restore)

相当于丢弃本地更改

git checkout -- <文件名...>
git restore <文件名...>

git checkout <版本ID> -- <文件名>
git restore --source=<版本ID> <文件名>

git丢弃本地修改的几种方式

撤销提交 (reset)

git reset HEAD  撤销add的所有内容

git reset HEAD <文件名...>  撤销add的某个/多个文件

git reset --soft HEAD^  撤销 commit,回退到上一个版本(多少个 ^ 表示上多少个版本)

git reset --hard <版本ID>  回退到指定版本

Git操作之 git add 撤销、git commit 撤销 - 糖糖H - 博客园

修改 Commit 注释 (commit --amend)

git commit --amend  修改 commit 的注释

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值