`

git 命令

    博客分类:
  • git
 
阅读更多

git branch -vv 查看一下目前分支的“关联”情况

git add --all 将本地文件夹里(文件夹或父目录包含.git目录)的增删改更新带git在本机的暂存空间。

git commit -m "123" 将本机的暂存空间的文件提交到本机的git的仓库的当前目录所在分支

git remote add z123 https://gitee.com/peng4602/z1 在本机登记一个远程仓库,登记的名字为z123,以后可以通过z123来访问远程仓库,如果指定名字默认名字origion,一般这一步只用在先有本地代码(也就是用git init 来初始化本地目录)的情况下。

git remote -v 来查看在本目录下已登记的远程仓库

git config --global user.name "kevin" 这个设置是提交代码时显示的名字,作用于当前登录的用户

git config user.name "localUser" 这个设置是提交代码时显示的名字,作用于当前目录(文件夹或父目录包含.git目录的目录)

git pull sh z123 master:master 把z123远程仓库的master分支上的代码拉取到本地的master分支上。

git pull z123 master:master --allow-unrelated-histories

后面加上 --allow-unrelated-histories , 把两段不相干的 分支进行强行合并

git status 查看当前目录下文件的修改状态,也就是还没有commit的状态。

git push z123 master:master 把本地的master分支上的代码提交到z123远程仓库的master分支上

 

 ! [rejected]        master -> master (non-fast-forward)

error: failed to push some refs to 'https://gitee.com/peng4602/z1'

hint: Updates were rejected because the tip of your current branch is behind

hint: its remote counterpart. Integrate the remote changes (e.g.

hint: 'git pull ...') before pushing again.

hint: See the 'Note about fast-forwards' in 'git push --help' for details.

 

 

上面的错误是要先pull,但是pull也发生了错误。命令和错误如下:

 

kevin@kevin-PC MINGW64 /e/gitee/z (master)

$ git pull z123 master:master --allow-unrelated-histories

From https://gitee.com/peng4602/z1

 ! [rejected]        master     -> master  (non-fast-forward)

 

但是将:master去掉以后就可以了,不懂。

 

kevin@kevin-PC MINGW64 /e/gitee/z (master)
$ git pull z123 master --allow-unrelated-histories
From https://gitee.com/peng4602/z1
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.en.md | 36 ++++++++++++++++++++++++++++++++++++
 README.md    | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 README.en.md
 create mode 100644 README.md
 这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。如果使用本文的方法还无法提交,需要看一下是不是发生了冲突,解决冲突再提交

 写的不错可以参考

https://blog.csdn.net/kjunchen/article/details/52155055

分支讲解这个文章不错可以参考。Git自学之路(四)- git branch 分支。

创建&切换分支

git branch b1 创建b1分支,但是不切换到b1分支。(git branch -b b1可以创建加切换)HEAD是指向当分支的指针,也可以理解为当前分支的别名。git checkout -b develop origin/develop 在远程分支的基础上建立develop分支,并且让develop分支追踪origin/develop远程分支。

git log --oneline --decorate 显示分支所对应的提交记录。git log命令显示从最近到最远的提交日志。

git checkout b1 是把HEAD指向了b1这个分支,如果是刚刚做的b1分支创建,master也没有提交代码,此时b1分支和master指向的是同一个提交。

此时在b1上做一次修改并提交,那么b1分支做指向的提交就比master向前了一个。

如果此时执行git checkout master 那么git会做两件时间,首先HEAD指向了master,其次将当前目录的内容回退到master指向的快照内容,也就是刚才在分支b1上的提交内容不会再当前目录里出现。

再在master做一些改动 vim a.txt git commit -a -m "master commit"

此时提交历史已产生分叉,因为刚才创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作。 上述两次改动针对的是不同分支,你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。 而所有这些工作,你需要的命令只有 branch、checkout 和 commit。

在使用 git log 命令查看分叉历史。 运行 git log --oneline --decorate --graph --all ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况。

合并分支

在分支开发完成后,用git status检查,确认所有文件都提交。然后切换到master下,git checkout master

git merge b1

此时发生了冲突

Auto-merging src/main/java/com/kevin/autogenproject/controller/OtherHTTPController.java
CONFLICT (content): Merge conflict in src/main/java/com/kevin/autogenproject/controller/OtherHTTPController.java
Automatic merge failed; fix conflicts and then commit the result.

 我习惯使用beyond compare 来对比和merge文件,需要配置beyond compare为默认对比和merge工具

先安装beyond compare软件,gitbash里执行下面命令即可

 

git config --global diff.tool bc4
git config --global difftool.prompt false
git config --global difftool.bc4.cmd '"C:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE"'

git config --global merge.tool bc4
git config --global mergetool.prompt false
git config --global mergetool.bc4.cmd '"C:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
git config --global mergetool.bc4.trustexitcode true

 

执行命令:

 

git mergetool

会自动弹出beyond compare的对比页面,编辑完成保存即可。

 

删除分支:

git branch -d b1

 

 

git branch -v --merged 可以过滤出当前已经合并过的分支

 

git branch -v --no-merged  可以过滤出当前没有合并过的分支

 

新的分支也可以上传到远程服务器端

git push abcd test:test   abcd是指远程服务器的地址别名通过git remote -vv可以查看,第一个test就是远程仓库里的即将通过这个命令新建的分支。第二个test是本地的分支,如果当前目录已经是test的分支那么这个参数可以省略。

 

从远程分支创建本地分支,分支的名字和远程分支一样。也可运行 git checkout -b [branch] [remotename]/[branch]

$ git checkout --track origin/serverfix

 

跟踪远程分支

如果用git push指令时,当前分支没有跟踪远程分支(没有和远程分支建立联系),那么就会git就会报错

There is no tracking information for the current branch.
Please specify which branch you want to merge with.

因为当前分支没有追踪远程指定的分支的话,当前分支指定的版本快照不知道要作为服务器哪一个分支的版本快照的子节点。简单来说就是:不知道要推送给哪一个分支。
那么如何建立远程分支,有3中方法:

  1. 克隆时自动将创建好的master分支追踪origin/master分支
git clone 服务器地址
git checkout -b develop origin/develop

 2.在远程分支的基础上建立develop分支,并且让develop分支追踪origin/develop远程分支。

git branch --set-upstream-to=abcd/develop develop

 3.或者使用-u参数,和上述命令是同样的效果

git branch -u abcd/develop develop

实际上是修改.git/config里面的内容

 

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

 

查看本地分支和远程分支的跟踪关系

$ git branch -vv
  iss53     7e424c3 [origin/iss53: ahead 2] forgot the brackets
  master    1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
  testing   5ea463a trying something new

这里可以看到 iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送到服务器上。 也能看到 master 分支正在跟踪 origin/master 分支并且是最新的。 接下来可以看到 serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 2 落后 1,意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。 最后看到 testing 分支并没有跟踪任何远程分支。

 

需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。 这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。 如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。 可以像这样做:$ git fetch –all; git branch -vv

 

那么假如我此时想要将master的改变推送到origin服务器的master分支上:

$ git checkout master//切换到master分支
...
$ git branch -u origin/master//将当前分支跟踪origin/master
Branch 'master' set up to track remote branch 'master' from 'origin'.

之后就可以执行git add和git commit了
现在再查看一下本地和远程的分支关系:

$ git branch -vv
  develop   08775f9 [origin/develop] develop
  feature_1 b41865d [origin/feature_1] feature_1
* master    1399706 [origin/master] init commit

master已经跟踪了origin/master了

 

删除远程分支

$ git push origin --delete serverfix

 

[git]merge和rebase的区别

https://www.cnblogs.com/xueweihan/p/5743327.html

git pullgit pull --rebase区别:git pull做了两个操作分别是‘获取’和合并。所以加了rebase就是以rebase的方式进行合并分支,默认为merge。
采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit


 

git merge 和 git merge --no-ff的区别

1、我自己尝试merge命令后,发现:merge时并没有产生一个commit。不是说merge时会产生一个merge commit吗?

注意:只有在冲突的时候,解决完冲突才会自动产生一个commit。

如果想在没有冲突的情况下也自动生成一个commit,记录此次合并就可以用:git merge --no-ff命令,下面用一张图来表示两者的区别:



 如果不加 --no-ff 则被合并的分支之前的commit都会被抹去,只会保留一个解决冲突后的 merge commit

 

 

回退版本

参考https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

 

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

 

 现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^ 
HEAD is now at e475afc add distributed

--hard参数有啥意义? # hard选项,表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库

看看readme.txt的内容是不是版本add distributed

$ cat readme.txt
Git is a distributed version control system.
Git is free software.

果然被还原了。

 

git push -f -u origin master_ptu

 

 

如果你在本地做了错误提交,那么回退版本的方法很简单 

1.先用下面命令找到要回退的版本的commit id:

 

git reflog 

 

2.接着回退版本:

 

git reset --hard a7e1d279

 

a7e1d279就是你要回退的版本的commit id的前面几位。

 

远程分支版本回退的方法 

如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。 

1.首先要回退本地分支:

 

git reflog

git reset --hard Obfafd

 

2.紧接着强制推送到远程分支:

 

git push -f origin master ## 这里假设只有一个master分支

 

 

 

 

 

 

 

 

  • 大小: 173.2 KB
  • 大小: 55.8 KB
分享到:
评论

相关推荐

    git常见指令大全脑图 超详细的git命令集合

    git常见指令大全脑图 超详细的git命令集合供大家学习下载,后续会持续进行更新,方便记忆git常见指令大全脑图 超详细的git命令集合供大家学习下载,后续会持续进行更新,方便记忆git常见指令大全脑图 超详细的git...

    git命令集合 git命令.md

    git命令集合 git命令.md

    Git 命令学习文档(集合整理)

    这个压缩包包含了多个关于Git命令学习的资源,如图像、PDF文档等,旨在帮助用户深入理解和掌握Git的基本及高级操作。 首先,"git_cmd.jpg"可能是一张包含常见Git命令的图片,通常这种图片会用图形化的方式直观展示...

    Node.js-git-js一个轻量级接口用于在任何node.js应用程序中运行git命令

    Git-js是针对Node.js环境设计的一个轻量级库,它提供了一个简单易用的接口,允许开发者在他们的Node.js应用中直接调用Git命令,无需离开JavaScript的舒适区。 ### Git-js核心特性 1. **轻量级**:Git-js的核心设计...

    Git命令自动补全

    git命令自动补全。

    git命令.pdf

    Git配置中有时会遇到中文乱码问题,解决这一问题的办法是通过设置环境变量,例如在Windows系统中可以通过 `set LC_ALL=C.UTF-8` 命令来设置环境变量,以确保Git命令输出中文不乱码。而在Linux或Mac系统中,使用 `...

    常用git命令大全

    以上是Git命令的基本知识点,对于开发人员来说,理解和掌握这些知识点是进行版本控制和协作开发的重要基础。通过Git,开发者可以在本地进行高效的开发工作,同时也可以与全球的开发团队共享和协作,共同推动项目的...

    如何掌握git 命令使用

    ### 如何掌握 Git 命令使用 在 IT 行业中,版本控制系统是软件开发不可或缺的一部分,而 Git 作为目前最流行的分布式版本控制系统之一,其掌握程度直接影响着项目的高效协同与版本管理能力。本文将从 Git 的安装、...

    常用Git命令清单.pdf

    最全的git命令 Git 有多种使用方式。 你可以使用原生的命令行模式,也可以使用 GUI 模式,这些 GUI 软件也能提供多种功能。 在本书中,我们将使用命令行模式。 这是因为首先,只有在命令行模式下你才能执行 Git 的 ...

    Git命令使用大全,包括:仓库创建、常用命令、分支管理、查看历史、标签以及远程仓库

    以上只是Git命令的一部分,实际使用中还有更多高级功能,如交互式重置(`git reset --interactive`)、合并冲突解决、cherry-pick(选择性合并)等。熟悉并掌握这些命令,将使你在版本控制和团队协作中更加得心应手。

    Git命令-思维导图

    常用的Git命令,并且做成了思维导图,整理非常清晰,绝对是你想要的

    常用 Git 命令清单 - 阮一峰的网络日志1

    以下是对标题和描述中提到的Git命令的详细解释: 一、新建代码库 1. `git init`:在当前目录创建一个新的Git仓库。 2. `git init [project-name]`:在指定的项目名称目录下初始化一个新的Git仓库。 3. `git clone ...

    git命令-git命令-git命令-git命令

    git命令-git命令-git命令-git命令

    Git命令一览表

    是最常用的Git命令,开发过程中不可缺少的部分,适合快速检索Git命令,使用起来方便快捷,尤其针对新手使用

    git命令.txt下载

    git命令.txt下载

    常用Git命令大全思维导图

    开发中代码管理少不了使用Git,对于初学者来说Git命令的学习是一个难过的坎,为了帮助大家记忆并快速掌握Git的基本使用,我把常用的Git命令整理成思维导图,分享给大家。非原创,内容转发自网络。感觉一图胜前言,...

    git命令大全

    ### Git命令大全详解 #### 一、Git 配置 (Config) **命令示例:** - `git version`:查看当前安装的 Git 版本。 - `git config -l`:列出当前的所有 Git 配置项。 - `git config --global user.name "Dean"`:...

    Git命令使用

    Git命令的使用即创建需要的下载吧

    Git命令速查表,中文高清

    Git命令速查表,常用Git命令一表全包括,中文高清,打印出来放在办公桌旁,您的工作好帮手!

Global site tag (gtag.js) - Google Analytics