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使用笔记的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—236. 二叉树的最近公共祖先