git使用笔记

Posted 楠之枫雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git使用笔记相关的知识,希望对你有一定的参考价值。

1. 初始化:

git init

2. 提交到本地仓库

git add -A

git commit -m‘msg’

3. 回滚到上一个提交版本

git reset --hard HEAD^

  • soft:不删除代码,撤销commit,不撤销git add
  • mixed:不删除代码,但是撤销commit,并且撤销git add
  • hard:删除代码,撤销commit,撤销git add

git reset和revert区别的总结:

  • reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除,包括提交历史记录;
  • revert仅仅是撤销指定commit的修改,并不影响后续的commit,但所撤销的commit被后续的commit修改了同一地方则会产生冲突;
  • reset执行后不会产生记录,revert执行后会产生记录;
  • reset执行后无法再次恢复,revert执行后因为不会清除记录,并且会产生新纪录,所以文件不会丢失,你可以多次执行revert恢复到某次改变之前的状态;
  • reset执行后HEAD会后移,而revert的HEAD则一直是向前的;
4. 回滚到上指定提交版本

git reset --hard 1094a //1094a的head的前几个指针id,可以通过git log查看

revert与reset的区别

revert是回滚,就是对某次提交进行反序操作,同时这次revert会保存一个提交记录。

比如有两个提交,1跟2,1是添加文件1,2是添加文件2,执行操作与结果如下:

这时如果我执行 git revert 2的head 那么结果是文件2将被取消,工作区的文件2将不见
同时提交了一个新的commit

这时如果我执行 git revert 1的head 那么结果是文件1将被取消,工作区的文件1将不见,
但是2的文件还是存在的,同时提交了一个新的commit

 只要记住,revert是对某次提交进行反处理,不会对其他提交进行影响就明白了

reset是重置到指定提交版本

git reset --soft HEAD^: HEAD^是指上一个提交head,--soft不会影响工作区
git reset --hard head :--hard会影响工作区

比如提交了一次提交1,还没有提交到远程仓库,这这时如果想把这次提交取消,但是又不想
影响到工作区的修改,可以使用:
git reset --soft 1,这时1的提交被取消,1提交前的修改不会被改变

比如提交了一次提交1,还没有提交到远程仓库,这这时如果想把这次提交取消,同时想把这次提交的修改也取消,可以使用:
git reset --head 1,这时1的提交被取消,1提交前的修改取消了,工作区将丢失修改内容

比如已经执行了10次修改与提交,如果reset 到3,结果如下:
git reset --soft 3:当前commit head指向3,3以后的commit将取消,那么3以后所有的修改将会再下一次commit进行提交,本地工作区的修改不会丢失

git reset --soft 3:当前commit head指向3,3以后的commit将取消,那么3以后所有的修改将丢失,包括工作区


5.查看最近的提交日志

$ git log

commit 614deee9fdd67e0bb1c635db61a94cafbb6fe0db (HEAD -> master)
Author: HuangWei huangwei@gmail.com
Date: Fri Oct 26 14:29:49 2018 +0800
change file //614dee就是头部前几个指针id

也可以通过$ git reflog 看省略的描述

6.查看当前的状态

$ git status 比如当前有更新但是没有add与commit,显示如下

On branch master

Untracked files:

(use “git add …” to include in what will be committed)

device-2018-10-25-150608.png

7.比较当前文件与上次提交文件的改动

git diff

git diff HEAD – readme.txt 查看指定文件的改变

diff --git a/test.txt b/test.txt

index cc4644b…e444770 100644

— a/test.txt

+++ b/test.txt

@@ -1 +1 @@

-ݣ汾2

\\ No newline at end of file

+ݣ汾2 dddd

\\ No newline at end of file
<>

8.撤销修改

比如撤销对刚才文件的修改:

git checkout – test.txt

注意,如果少了 – 就变成了切换分支

9.删除文件

不要使用 git rm 会提示异常:

fatal: pathspec ‘IMG_20180224_105233’ did not match any files

直接rm 然后提交就是了,ls可以看到当前目录下的文件

10. 创建并切换分支

git checkout -b dev

没有-b是指切换分支

11. 合并指定分支到当前分支

git merge dev //合并dev到当前分支,注意当前分支不是dev分支

12. 删除指定分支

git branch -d dev //删除dev分支
删除远程的bug_xzx分支
git push origin --delete bug_xzx

13. rebase操作

rebase操作可以把本地未push的分叉提交历史整理成直线

14. 合并出现冲突

多个分支各自执行了修改与提交,这时合并的分支,如果有冲突会提示有冲突。解决方法是修改冲突文件。可以通过git status查看有哪些冲突。冲突地方会显示如下,显示多个分支的内容。

<<<<<<< HEAD
java.nio.ByteBuffer;
=======
java.nio.ByteBuffers;
>>>>>>> dev

解决完冲突的地方重新提交即可

12. 把当前的工作现场暂时隐藏

git stash

可以通过git stash pop恢复

用途比如:当前正在修改,忽然来了个紧急的bug,可以先通过git stash隐藏当前的修改的内容,然后切换到新的分支,修改bug完后合并分支,再使用git stash pop恢复到之前的工作状态


下面的是工作过程中使用记录的

将本地仓库配置远程仓库:

git remote add git@192.168.2.50:/home/git/repo/Test.git

获取远程仓库

git fetch orgin(远程参考名)

切换到指定分支

git checkout --track origin/dev 切到origin仓库的dev分支

提交到切换到的dev分支

1.git add -A 添加所有,或者是指定文件或者目录

2.git commit -m ‘提交信息’ 提交到本地仓库

3.git push 提交到远程仓库

4.git branch -vv 查看分支状态

查看分支

git branch -a 查看所有分支

导出zip

git archive --format=zip --output=“…/output.zip” dev -0 导出

创建本地分支并对应其远程分支:

一个空的目录
需要初始化创建本地分支

git init

如果不指定,默认生成是master分支

可以切换到指定分支

git checkout -b dev //如果dev分支不存在,将创建分支dev,并进入该分支

git checkout --track origin/dev //切换到origin/dev分支

现在看一下状态:

$ git status

On branch dev//已经在新分支dev

No commits yet

nothing to commit (create/copy files and use “git add” to track)

这时看所有分支,发现是没有东西的

git branch -a

//没有东西,因为没有提交任何东西到仓库

可以修改点东西,进行add commit

git add

git commit

输入更新日志:

a开始输入

esc 左上角那个

:wq 按enter保存退出

再看分支,发现了dev分支

$ git branch -a

* dev

将本地分支与远程分支关联起来:

git remote add origin git@192.168.2.52:/home/git/repo/test.git

然后把origin仓库的所有分支拉取下来,可以指定只拉取指定分支的吧
git pull origin

接下来查看一下远程拉下来的远程仓库有哪些分支:
git branch -a

测试时看到以下仓库:

* dev

remotes/origin/dev

remotes/origin/doc

remotes/origin/master

remotes/origin/releases

跟踪指定远程分支:

//git branch --track origin/master

配置上游分支为远程分支,为了将本地分支与远程分支对应起来:

git branch -u origin/dev //u upstream

因为刚才新创的dev分支提交了一次,与远程origin/dev没有祖先节点,所以是无法提交的
所以我们需要切换到新的分支与origin/dev对应起来,先把本地dev分支删除,由于现在
在本地dev分支,所以先切换切换到新的分支

git checkout --track origin/master //跟踪到master分支,会在本地创建并进入master分支,
可以指定本地分支的名字,默认与远程分支同名

删除本地分支

git branch -D dev //D大写强制删除

删除远程分支

$ git push origin --delete

看看有哪些分支

$ git branch -a

* master

remotes/origin/dev

remotes/origin/doc

remotes/origin/master

remotes/origin/releases

切换跟踪远程分支

git checkout --track origin/dev

发现代码已经弄下来了

更新代码

git fetch

git pull

gitblit 设置密钥

https://www.jianshu.com/p/62c2d31f3074

合并后需要填写注释并退出

按a开始输入
然后按esc退出键,这时出现:,如果不出现按shift+:
输入wq,按enter键即可退出

a插入 w写入,q退出

提交空文件夹

在根目录执行:find . -type d -empty -exec touch /.gitignore ;
原理是创建.gitignore文件

git push 出现push error: remote unpack failed: error Missing tree b6624bc5372c461fc382c70db1ab
git gc 清除下垃圾再尝试
删除commit记录

有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。二者区别:

  • git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
  • git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;
    更多参考
本地分支有问题,如何重新拉取远程最新分支

切换到其他分支,然后删除有问题的本地分支,重新切到指定分支,默认切换过去后会跟踪并拉取远程分支的最新数据

以上是关于git使用笔记的主要内容,如果未能解决你的问题,请参考以下文章

Git:找到两个分支的共同祖先

「学习笔记」tarjan求最近公共祖先

Linux------Git-5

LeetCode Java刷题笔记—236. 二叉树的最近公共祖先

git如何merge私有remote branch及如何计算树节点最小功能祖先

学会Git玩转Github笔记——Github基本概念 & 仓库管理