Git 常用命令总结,掌握这些,轻松驾驭版本管理

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

最近公司的代码管理工具要从SVN转到Git上,因此虽然之前用过Git,但是都是一些简单的推送提交,因此还是有必要进行一些系统的学习,这里做一下笔记,以备后询,且不定期更新。

关于SVN和Git的比较已经有很多文章说过了,就不再赘述,本文的重点是如何使用常用的Git命令进行操作,冷门的就不说了,且比较零散,系统的学习推介廖雪峰的Git教程。

声明

  1. 下面用户名都为 SHERlocked93,请自行修改成自己的用户名

1. 概览

640?wx_fmt=png

  • 工作区 Workspace
  • 暂存区 Stage / Index
  • 本地仓库 Repository
  • 远程仓库 Remote

2. 修改

2.1 暂存修改

操作一览

操作bash
创建stashgit stash
查看git stash list
应用git stash apply stash@{ <num>}
删除git stash drop stash@{ <num>}
还原上一个暂存并删除暂存(如无conflict)git stash pop

如果在工作的时候出现了临时需要解决的问题,而你又不希望提交,那么有个 stash功能

git stash

在暂存后工作区会回退到最近的一个commit的状态,以便开建新分支;比如我们修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场 git stash一下,然后去修复bug,修复后,再 git stash pop,回到工作现场。

2.2 撤销修改

还未提交到暂存区

当修改还没有被 add的时候,可以使用

git checkout -- filename.txt

来丢弃工作区某文件的修改,当然也可以把后面的文件改成 *来撤销所有文件的修改。这是用仓库的文件覆盖工作区的文件。

注意这里用的是 --,如果没有这个 --的话就变成切换分支了。

还未提交到仓库

如果你的修改已经被 add到了暂存区,但是还没有被 commit,那么可以使用

git reset HEAD filename.txt	
git checkout -- filename.txt

首先用 reset来把修改撤回到工作区,再使用上面的 checkout命令撤回工作区的修改。这里的 reset相当于 add的反操作。

已经提交到仓库

则可以版本回退

git reset --hard 15zdx2s

这里的 --hard表示强制回退,丢弃本地的修改。这个回退比较野蛮,该版本号之后的提交都将不可见。

撤销之前某一个提交

git revert撤销一个提交的同时会创建一个新的提交,这是一个安全的方法,因为它不会重写提交历史。但实现上和reset是完全不同的。它撤销这个提交引入的更改,然后在最后加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交。

git revert 46af7z6

相较于 resetrevert不会改变项目历史,对那些已经发布到共享仓库的提交来说这是一个安全的操作。其次 git revert 可以将提交历史中的任何一个提交撤销、而 reset会把历史上某个提交及之后所有的提交都移除掉,这太野蛮了。

相比 reset,它不会改变现在的提交历史。因此, revert 可以用在公共分支上, reset 应该用在私有分支上。

合并commit

如果已经 commit了怎么办,如果要撤回目前的 commit,可以把它合并到上一个 commit

git rebase -i HEAD~~

在出现的两个提交信息的 pick改为 fixup

3. 分支操作

3.1 创建/查看/合并分支

操作一览

操作bash
查看分支git branch
查看本地和远程分支git branch -a
在target分支上创建分支,没有则从当前分支git branch <branch-name> <target-branch>
创建并切换分支git checkout -b <branch-name>
合并某分支到当前分支git merge <branch-name>
删除分支,只能删参与了合并的git branch -d <branch-name>
强行删除git branch -D <branch-name>
删除远程分支git push origin : <remote-branch-name>

创建分支

# 创建新分支	
git branch bug-fix	
# 查看分支,-a查看本地和远程的分支,-r查看远程分支,-l或没有只查看本地	
git branch -a	
# 切换到刚刚创建的分支	
git checkout bug-fix

上面两个步骤可以合并为

# 创建并切换到分支	
git checkout -b bug-fix

如果修改一下本地文件之后在这个分支继续培育一个版本之后,怎么去合并到主分支呢

git add *	
git commit -m "some change"	
# 切换到主分支	
git checkout master	
# 合并分支	
git merge bug-fix	
# 删除分支 (可选)	
git branch -d bug-fix

如果master分支和新的分支都各自培育了版本,那么自动合并通常会失败,发生冲突 conflict,此时需要打开文件解决冲突之后 commit一个版本以完成合并

git add *	
git commit -m "branch merge"

这里提一下, merge的时候有几个主要模式, --no-fffast-forward,其中 fast-forward是默认的

  1. fast-forward:在master开始的新分支前进了几个版本之后如果需要merge回来,此时master并没有前进,那么这个模式就是把HEAD与master指针指向新分支上,完成合并。这种情况如果删除分支,则会丢失分支信息,因为在这个过程中并没有创建commit。
  2. --no-ff:关闭默认的 fast-forward模式,也就是在merge的时候生成一个新的commit,这样在分支历史上就可以看出分支信息。
3.2 远程仓库操作

操作一览

操作bash
克隆git clone <url>
添加远程仓库git remote add <name> <url>
删除远程仓库git remote rm <name>
拉取git pull <remote-branch-name> <local-branch-name>
推送本地所有分支到远程git push --all origin
推送到远程同名分支git push origin <local-branch-name>
推送本地分支到远程mastergit push origin <local-branch-name>master
把当前本地分支推送并创建到远程git push origin
检出远程分支git checkout -b <new-local-branch-name> origin/ <remote-branch-name>

关于各个分支,哪些需要推送呢

  1. master分支是主分支,因此要时刻与远程同步;
  2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  4. feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

直接 clone

在github上创建一个新的项目之后,比如叫 learn-git,那么可以直接 clone下来,注意创建的时候不要选择 Initializethisrepositorywitha README,我们要的是一个空的仓库

git clone https://github.com/SHERlocked93/learn-git.git

这样在本地就直接创建了一个空的文件夹 learn-git,当然里面有 .git文件夹。也可以使用SSH地址来clone,速度会快一些,也不用每次推送都输入口令,推介使用这种

git clone git@github.com:SHERlocked93/learn-git.git

添加一个文件 filename.txt之后

git add filename.txt	
git commit -m "add filename.txt"	
git push -u origin master

这样就把本地新建的文件push到了远程仓库

本地与远程建立关联

如果已经有了本地工程文件夹,如何分享到github远程仓库呢,当然此时我们已经在github上创建了一个新的空白项目,还是叫 learn-git,在本地文件夹中

git init	
# 关联远程库	
git remote add origin git@github.com:SHERlocked93/learn-git.git	
git push -u origin master

就可以了,如果你的远程仓库已经有了提交,那么在 push之前需要

# 允许不想干库合并	
git pull origin master --allow-unrelated-histories	
git push -u origin master

先拉取远程分支,注意这里 --allow-unrelated-histories允许两个不想干的分支强行合并,再 push;这样在github的网站上还能看到commit记录。

也可以强硬一点直接强行推送



**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/39fddbd54fe5f2683b82fd9a1b143479.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f6e8929419c0dc16786a15ee7515626.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
[外链图片转存中...(img-wQudmpz4-1715786589691)]
[外链图片转存中...(img-0t0bgJui-1715786589691)]

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值