Git 基础操作

Git 分布式版本控制系统

在这里插入图片描述

核心概念

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库(或本地仓库)
  • Remote:远程仓库
  • commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 commit id是一个SHA计算出来的一个非常大的数字,用十六进制表示防止冲突

分支

分支策略

一般在实际开发中,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活,干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本,开发人员每个人都有自己的分支,时不时地往dev分支上合并就可以了。所以,团队合作的分支看起来就像这样:

在这里插入图片描述

创建dev分支:

git checkout -b dev master

将 dev 分支发布到Master分支的命令:

git checkout master # 切换到 Master 分支
git merge --no-ff dev # 对 dev 分支进行合并 
git branch -d dev # 删除 dev 分支

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

git status

用于查看在你上次提交之后是否有对文件进行再次修改

Changes not staged for commit: 已修改未git add到暂存区
(use “git add …” to update what will be committed)
(use “git restore …” to discard changes in working directory)

Changes to be committed: 已git add到暂存区可提交
(use “git restore --staged …” to unstage)

Untracked files: 新增文件
(use “git add …” to include in what will be committed)

**Changes to be committed:**表示已经从工作区add到暂存区的file(文件或文件夹),可以通过 git restore --staged filename 命令将该file从暂存区移出,只有工作区有该文件,该文件就为Untracked files。

临时任务或 Bug 修复

  • 当前在dev分支,工作只进行到一半,还没法提交,但必须马上修复bug,怎么办?
git stash # 临时保存修改
  • 现在创建分支来修复bug。首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
git checkout master # 切换master分支
git checkout -b issue-101 # 新建分支
git add readme.txt # 添加修改
git commit -m "fix bug 101"
  • 修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git switch master
git merge --no-ff -m "merged bug fix 101" issue-101
  • 可返回到dev分支干活, 恢复保存的现场
git switch dev
git stash list
  stash@{0}: WIP on dev: f52c633 add merge
git stash pop # 恢复的同时把stash内容也删了

# 或 2步
git stash apply # 恢复
git stash drop # 删除

git stash apply stash@{0}
  • 同样的bug,要在dev上修复

我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:并不是把整个master分支merge过来。为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前dev分支

git cherry-pick 4c805e2 # 将对应commit提交到dev分支。

设置本地分支对应远程分支的两种方法

    # 1. 增加一个新的远程仓库,并在本地命名为origin
    git remote add origin [Remote Url] 
    git push -u origin test # Set upstream when pushing to remote 适用于第一次关联并提交
    # 2. Set upstream without pushing it with option -u / --set-upstream-to 适用于仅设置远程关联
    git branch -u origin/test
    git branch --set-upstream-to=origin/test

撤销修改

  1. git add/rm 之前
git checkout  .   //是撤销从上次提交之后所做的所有修改
git checkout filename  //是撤销从上次提交之后的单个文件的修改
git restore  <file> //撤销修改
  1. git add/rm 之后,还未git commit

情况一:从暂存区撤出
git restore --staged
git reset HEAD //reset 某个文件, 保留修改
git reset HEAD . //reset 所有, 保留修改

情况二:git rm 的文件
git checkout – file_name

三、撤销修改 git commit -m “” 、还未执行git push

  1. 找到上次git commit的 id,找到你想撤销的commit_id

git log //查看日志

  1. 完成撤销,同时将代码恢复到前一commit_id 对应的版本

git reset --hard commit_id //执行撤销

注:不保留commit 之前修改的代码,reset之后,代码回滚到上个版本
3.完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改。

git reset commit_id //注释

注:保留commit之前修改的代码,撤销后,代码是修改后的状态,还能继续修改

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

1、第一步:

git reset --hard 版本号 //本地回退到指定的版本

2、第二步:

git push -f origin dev //将远程的也回退到指定版本

Git撤销提交

撤销命令:
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit

推送到远程:
$ git push origin HEAD --force

git clone 含有子模块的项目

当一个 git 项目包含子模块(submodule) 时,直接克隆下来的子模块目录里面是空的。

有两种方法解决:
方法一 如果项目已经克隆到了本地,执行下面的步骤:

    git submodule init #初始化本地子模块配置文件
    git submodule update #更新项目,抓取子模块内容。

方法二 在执行 git clone 时加上 --recursive 参数。它会自动初始化并更新每一个子模块。例如:

git clone --recursive https://github.com/example/example.git

常用指令

git config –global user.name "name"
git config –global user.email "email address"
git init [dir] # 在当前目录或指定目录dir创建一个新的代码库
git clone [url] [dir]# 通过指定的URL获取一个代码库到指定目录。
git add [file] # 将一个文件修改添加至stage(暂存区)。Add file contents to the index
git add * #将多个文件添加至stage(暂存区)。
git rm [file1] [file2]  # 删除工作区文件,并且将这次删除放入暂存区
git mv [file-original] [file-renamed] # 改名文件,并且将这个改名放入暂存区
git diff # 显示暂存区和工作区的差异 
git diff HEAD # 显示工作区与当前分支最新commit之间的差异
git diff HEAD -- readme.txt
git diff --cached [file] # 显示暂存区和上一个commit的差异
git commit -m "message" # 在版本历史记录中永久记录文件。
git commit --amend -m [message] # 替代上一次提交,代码没有任何新变化,则改写上一次提交信息
git commit -a #提交git add命令添加的所有文件,并提交git add命令之后更改的所有文件。
git diff #显示尚未添加到stage的文件的变更。
git diff --staged # 显示添加到stage的文件与当前最新版本之间的差异。
git diff [first branch] [second branch] # 显示两个分支之间的差异。
git reset [file] # 从stage中撤出指定的文件,但可以保留文件的内容。
git reset [commit] # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset HEAD [file] # 可以把暂存区的修改撤销掉
git reset --hard [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard HEAD^ # 回退到上一个版本
git status # 显示所有需要提交的文件。
git rm [file] # 删除工作目录中的文件,并将删除动作添加到stage。
git log [--pretty=oneline] # 显示当前分支的版本历史记录。
git log -5 --pretty --oneline # 显示过去5次提交
git log --graph --pretty=oneline --abbrev-commit # 分支合并图
git log --follow [file] # 显示某个文件的版本历史记录,包括文件的重命名。
git show [commit] # 显示指定提交的元数据以及内容变更。
git tag [commitID] # 给指定的提交添加标签。
git push [remote] [tag] 提交指定tag
git branch # 显示所有的本地分支。
git branch -vv # 显示所有的本地分支。
git branch -r # 显示所有的远程分支。
git branch [branch name] # 创建一个分支。
git branch -d [branch name] # 删除指定的分支。
git branch [branch] [commit] # 从指定commit新建一个分支
git branch -a # 查看所有本地及远程分支
git branch --set-upstream-to=origin/分支名 分支名  # 本地分支关联远程分支
git branch --set-upstream [branch] [remote-branch] # 建立追踪关系,在现有分支与指定的远程分支之间
git checkout [branch name] # 切换分支。
git checkout -b [branch name] # 从当前分支创建一个分支,并切换到新分支上。
git checkout -b [branch] origin/[remote-branch] # #从远程分支创建本地分支
git checkout -b feature-x develop
git checkout -b [branch] [tag] # 新建一个分支,指向某个tag
git checkout . # 恢复暂存区的所有文件到工作区
git checkout -- [file]  # 丢弃工作区修改,用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git checkout [commit] [file] # 恢复某个commit的指定文件到暂存区和工作区
git merge [branch name] # 将指定分支的历史记录合并到当前分支。
git fetch [remote] # 下载远程仓库的所有变动
git remote # 显示所有远程仓库
git remote -vv # 可以查看你当前项目的远程git地址 
git remote show [remote] # 显示某个远程仓库的信息
git remote add [remote name] [Remote Url] # 增加一个新的远程仓库,并命名
git push [remote name] master # 将主分支上提交的变更发送到远程代码库。
git push -u origin master # 将master分支上提交的变更发送到远程代码库,还会把本地的master分支和远程的master分支关联起来。
git push -u origin master:test # 以本地 master 分支创建远程 test 分支,并设置关联-u,适用于添加个人分支
git push [remote name] [branch] # 将指定分支上的提交发送到远程代码库。
git push –all [remote name] # 将所有分支发送到远程代码库。
git push [remote name] :[branch name] #删除远程代码库上的一个分支。
git pull [Repository Link] #获取远程服务器上的变更,并合并到你的工作目录。
git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
git stash save # 临时保存所有修改的文件。
git stash pop # 恢复最近一次stash(储藏)的文件。
git stash list # 显示stash的所有变更。
git stash drop # 丢弃最近一次stash的变更。
git reflog # 记录你的每一次命令

配置

Git SSH 配置

#

  1. 生成 sshkey
    ssh-keygen -t rsa -C “xxxxx@xxxxx.com”
  2. 添加生成的 public key 添加到远程仓库中。
    cat ~/.ssh/id_rsa.pub | clip
  3. 测试 ssh -T git@xxxxxxx.com

约定

任务要在对应仓库创建分支,例如:taskno-1234-title,每日结束,即时任务完不成,也要提交代码。

参考文档 常用命令

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340