前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >别再说你不会Git了,这个教程直接拿走!

别再说你不会Git了,这个教程直接拿走!

作者头像
用户10002156
发布2023-08-07 10:53:50
2370
发布2023-08-07 10:53:50
举报
文章被收录于专栏:生活处处有BUG

背景

使用 Git 作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。

配置

Git配置系统级、全局、当前仓库用户名、邮箱的命令

代码语言:javascript
复制
git config --global user.name "Jerry Mouse"
git config --global user.email "jerry@yiibai.com"

列出Git设置

代码语言:javascript
复制
git config --list
git config -l

初始化

代码语言:javascript
复制
git init

修改提交

代码语言:javascript
复制
git add a.html
git commit -m "提交文件a.html"
  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  • • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。

分支

代码语言:javascript
复制
git checkout -b dev // 新建分支

git branch // 查看当前分支

git checkout master   // 切换分支

git  branch  -a // 查看远程全部的分支,白色的表示本地有的,红色的表示本地没有,仅在远程存在

git merge dev // 合并分支

git branch -d dev // 删除分支

git branch -D branch_name  // 本地强制删除分支  

git push origin branch_name// 推到远程

解决冲突**

1、发生冲突的文件

代码语言:javascript
复制
<<<<<<< HEAD

Creating a new branch is quick & simple.

=======

Creating a new branch is quick AND simple.

>>>>>>> feature1

其中,git使用<<<<<<<=======>>>>>>>标记文件中自己和别人产生冲突的部分。

<<<<<<<=======之间为自己的代码;=======>>>>>>>之间为别人的代码。

如果保留自己的代码,将别人的代码删掉即可。

要注意一下,可能两个人的代码都是对的 冲突解决后提交

Bug分支

1、储藏更改:将当前更改的代码储藏起来,等以后恢复使用

代码语言:javascript
复制
git stash

2、恢复储藏的代码

代码语言:javascript
复制
git stash pop //恢复的同时把stash内容删掉

或者

代码语言:javascript
复制
git stash apply  //恢复stash,但是stash内容并不删除
git stash drop //在上面操作的基础上,以此来删除stash

git stash list //查看全部的stash列表

3、将stash空间清空

代码语言:javascript
复制
git stash clear

4、git stash pop 和 git stash apply 区别

原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。

版本回退

1、回退至上一个版本

代码语言:javascript
复制
git reset --hard HEAD

2、回退至指定版本

代码语言:javascript
复制
git reset --hard  版本号

3、查看以往版本号(本地的commit)

代码语言:javascript
复制
git reflog

4、查看各版本号及信息(所有的commit:本地commit + 其他同事的commit)

代码语言:javascript
复制
git log
  • git reset是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
  • • git revert与git reset最大的不同是,git revert 仅仅是撤销某次提交。

撤销修改

1、撤销修改

代码语言:javascript
复制
git  checkout -- a.html

分两种情况分析:

  1. 1. 还没有执行 git add 操作,执行上面的操作后,会恢复到和版本库中一模一样的版本状态。
  2. 2. 执行了git add ,还没执行 git commit ,再执行上面的操作后,会恢复到git add 结束后的状态

注:一旦执行了git commit -m "*",就不能再使用上面的命令回退。

对于已经push的版本,进行回退

1、第一步:

代码语言:javascript
复制
git reset --hard 版本号 //本地回退到指定的版本

2、第二步:

代码语言:javascript
复制
git push  -f origin dev    //将远程的也回退到指定版本

本地同步远程删除的分支

代码语言:javascript
复制
git fetch origin -p  //用来清除已经没有远程信息的分支,这样git branch -a 就不会拉取远程已经删除的分支了

删除掉没有与远程分支对应的本地分支

从gitlab上看不到的分支在本地可以通过git branch -a 查到,删掉没有与远程分支对应的本地分支:

代码语言:javascript
复制
git fetch -p

查看远程库的一些信息,及与本地分支的信息

代码语言:javascript
复制
 git remote show origin

Git远程操作相关

(1). clone

代码语言:javascript
复制
git clone <版本库的网址>
git clone <版本库的网址> <本地目录名>

(2). remote

代码语言:javascript
复制
# 列出所有远程主机
git remote

# 使用-v选项,可以参看远程主机的网址
git remote -v

# 可以查看该主机的详细信息
git remote show <主机名>

# 添加远程主机
git remote add <主机名> <网址>

# 删除远程主机
git remote rm <主机名>

# 修改远程主机名称
git remote rename <原主机名> <新主机名>

(3). fetch

代码语言:javascript
复制
# 取回所有分支(branch)的更新到本地
git fetch <远程主机名>

# 取回某的特定分支的更新
git fetch <远程主机名> <分支名>

# 取回origin主机的master分支的更新
git fetch origin master

# 所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支
git merge origin/master
git rebase origin/master

(4). pull

代码语言:javascript
复制
# 取回origin主机的next分支,与本地的master分支合并
git pull origin next:master

# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next

# 上面的命令实质上等同于先做git fetch,再做git merge。
git fetch origin
git merge origin/next

# 合并需要采用rebase模式
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

(5). push

代码语言:javascript
复制
# 将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建
git push origin master

# 省略了本地分支,以下等同,删除origin主机的master分支
git push origin :master
git push origin --delete master

# 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push origin

# 如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push

# 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
git push -u origin master

# 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --all origin

# 强制推送
git push --force origin

# git push不会推送标签(tag),除非使用–tags选项
git push origin --tags
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生活处处有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 配置
  • 初始化
  • 修改提交
  • 分支
  • 解决冲突**
  • Bug分支
  • 版本回退
  • 撤销修改
  • 对于已经push的版本,进行回退
  • 本地同步远程删除的分支
  • Git远程操作相关
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档