git相关

目录

git 前提知识

git 常用操作

git 撤销模式 


git 前提知识

        首先要知道四个分区:

  • 工作区 :代码在本地存储的目录位置(自己本地的代码)。
  • 暂存区 :git 可以追踪的代码  — 临时存储
  • 本地库 :暂存区的代码可以提交到本地库(commit),并生成对应的版本 ——生成历史版本
  • 远程库:(远程库:如 github)本地区的代码可以提交到远程库(push),并生成对应的版本 ——存储在远端

git 常用操作

git init

        初始化当前目录为仓库,初始化后会自动将当前仓库设置为 master。

git branch

        使用 git checkout -b 参数来创建一个分支,创建完成分支后会自动切换过去:

git branch -b 分支名

        使用 branch 来查看当前属于哪个分支,也就是查看 HEAD 的指向:

git branch

        查看当前所有分支可以使用, HEAD 就指向当前分支:

git branch -a 

        删除分支:

git branch -D 分支名 // 删除本地分支

git push origin --delete 远程分支名
 

        

        分支的重要性:

当我们在开发中,无论做什么操作都建议使用分支,因为在团队开发中,master 只有一个,合作开发里任何人都可以从 master 里拉取代码,拉取时 master 后创建分支,分支名改为你要做的操作,比如修改某某文件,修改什么什么 bug,单词以下划线做分割,然后在提交一个版本

分支名必须简洁,和标题一样,提交的 commit 在简单描述一下就可以了。

如我们的 master 中有个 bug,是内存泄漏

我们可以常见一个分支名为 Memory_Leak,然后在 commit 里简单描述一下修复了哪个模块的内存泄漏,不要写修复了什么什么代码,什么什么问题导致的,只需要简单描述一下就可以了。

一般情况下,我们都是拉取 master 后,想要修改功能或者添加功能,都是创建分支,在分支里修改不影响 master,如果修改错了代码或者误删之类的,在从 master 上拉取一份就可以了。

git checkout

        切换分支:

git checkout 分支名  //切换到分支


git checkout -b 分支名 //等价于 git branch -b 分支名,就是创建分支,并切换到创建的新分支上

git status

        查看当前仓库状态, 可以使用 git status 查看文件是否被改动,如果修改了就是这样:

         如果是添加,Untracked 代表未提交:

         使用 git add 命令后, 再次 status 就会变成绿色。

git add

        将文件从工作区中,添加到暂存区。

git add --all // 将当前目录下包括子目录下所有改动的文件提交到暂存区,还会把删除的文件也提交进去


git add . //  与 git add --all 相差不大,但是不会记录删除操作。

git commit

        提交到本地仓库,一般使用下面命令来简写描述我们的信息,如果不使用-m,会调用终端的注释编辑器让你输入描述信息。

git commit -m "你的备注" 

        git commit 会为我们生成 40 位的哈希值,用于作为 id,并把刚刚用 git add 添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚。

至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。

改写提交命令,我们提交了仓库,但是发现注释写错了,我们可以使用 --amend 长命令选项来改写提交:

git commit --amend  

git log

        查看历史提交日志,想要确定是否改写成功,我们可以使用 git log 查看一下。

具体例子:

git reflog

        git reflog 可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中。

git stash

        在当前工作区修改了文件或者其它功能时,你想要切换或者创建到其它分区是不可能的,我们分支修改了内容,想要切换到其它分区 git 会终止你这样操作,为的是防止丢失当前工作区内容。我们可以使用 git stash 命令来保存当前工作状态:

git stash 


git stash list  //查看当前存储了多少工作状态

        在别的分支做完事情之后,在切换回刚刚的分支,然后在刚刚的分支中将状态恢复:

git stash pop  //pop 后,在 list 保存的列表会删除

        准确来说,这个命令的作用就是为了解决 git 不提交代码不能切换分支的问题。

git cherry-pick

        对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并( git merge )。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

将一个分支上的某个 commit 合并到另一个分支,可用使用 cherry-pick 命令实现。

比如将 dev 分支上 commit_id 为 f99f2b57b 的提交合并到 master 分支:

1)切换到 master 分支:git checkout master

2)执行 cherry-pick 命令:git cherry-pick f99f2b57b

3)推送到远程 master 仓库:git push

        注意 master 上新的 commit id 与 dev 上的 id 并不相同,即只是将 dev 上的修改拷贝过来作为一个新的提交,这就会带来一个问题:cherry-pick 之后,dev 想再次 merge 到 master,要先对 dev 分支进行 rebase 变基或拉取 master 分支最新代码。

举个更详细的例子,命令的作用就是把指定的 commit,拉到一个新的分支上。

        这幅图中,每个圆圈代表一次 commit,一条线是一个分支, 比如 c2,c3,这是两次提交,在同一个分支上。

此时需求是:要把绿色分支的 C3,蓝色分支的 C5,紫色分支的 C7 合到一条新的分支上。此时就需要 cherry-pick 命令了。

首先切到 master 分支,然后输入以下命令后会得到下图效果:

git cherry-pick C3 C5 C7

git patch

本地修改未 commit

希望把修改的内容生成 patch,可以如下操作:

git diff > commit.patch

对于已经 add 但是未 commit 的修改:

git diff --cached > commit.patch

本地修改已 commit  , 希望把最近一次的修改生成 patch:

git diff commit_id1 commit_id2 > test.patch #(commit_id1 是最后 1 次 id commit_id2 是倒数第二次提交的 id ,这里是举例打 1 次提交的 patch 当然也可以使用就一个 id 就是倒数第二次的 id,多个提交的话需要注意 id 即可,)


# 注意:commitId 为倒数第二个提交 ID
git diff commitId > commit.patch

apply 应用 patch

生成 patch 文件后,我们切换到希望应用 patch 的分支,然后按下面的步骤操作:

# 检查 patch 是否可以应用
git apply --check commit.patch
# 打单个补丁
git apply commit.patch
# 打多个补丁
git apply ../patch/*.patch

打完补丁后再 add/commit 进行提交。

git rebase

参考文档

git rebase 是将提交到某一分支上的所有修改都移至另一分支上。即如果在 B 分支上使用 git rebase A 就是将 B 分支上的修改都变基(移到)A 分支上

git pull/merge/fetch

参考文档

  • git fetch 是将远程库的最新内容拉到本地库,用户在检查了以后决定是否合并到工作区中。
  • git merge 是将本地的两个分支合并,如果在分支 A 中执行 git merge B,那就是将分支 B 中的代码合并到分支 A 中。
  • git pull 则是将远程主机的最新内容拉去到本地库后直接合并到工作区中,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

git 撤销模式 

Git撤销修改_git 撤销本地修改_路痴的兔子的博客-CSDN博客

​ 撤销修改分为以下情况:

1、已经 commit 提交到版本库。

已经使用 commit 提交到了版本库, 因为已经产生了新的提交,所以撤销修改可以使用 git reset --hard HEAD^来回退到上一个版本,从而达到撤销修改的效果。

git reset --hard HEAD^ //撤销之前的 commit,并且舍弃之前 commit 的修改
git reset --soft HEAD^ //撤销之前的 commit,并且保留之前的 commit 修改

2、已经 add 提交到暂存区,但是没有使用 commit 提交到版本库。

因为已经提交到暂存区了,所以撤销修改需要先将提交到暂存区的修改拿回到工作区。

git reset HEAD <file>

命令 git reset HEAD <file>可以把暂存区的修改撤销掉,重新放回工作区。==注意该命令和回退版本的命令的区别,因为很相似。==这样所有的修改就回到了工作区,丢弃工作区的修改只需执行以下命令。

3、 文件修改都在工作区,没有提交到暂存区。

丢弃工作区的修改只需要执行一下命令(不能丢弃新建的文件,也就是 untrack 文件):

git checkout -- <filename>	//使用 git restore <file> 的效果一样


git checkout . // 丢弃所有文件修改

4、文件修改在工作区,且是新建的文件(untrack 文件)

两种办法,要么是自己手动删除这个文件,要么输入:

git clean -n //是一次 clean 的演习, 告诉你哪些文件会被删除。记住他不会真正的删除文件, 只是一个提醒。


git clean -f //删除当前目录下所有没有 track 过的文件。他不会删除.gitignore 文件里面指定的文件。


git clean -f fileFullName //删除指定路径下的没有被 track 过的文件。


git clean -df  //删除当前目录下没有被 track 过的文件和文件夹。


git clean -xf  //删除当前目录下所有没有 track 过的文件。不管他是否是.gitignore 文件里面指定的文件夹和文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值