最近开始使用git作为版本控制工具,但是自己老是记不住相应的命令,所以在这里整理部分有关git的命令,这里是git的官方文档
一、查看当前状态
1.1 查看当前commit内容的状态
git status
1.2 查看commit的日志
git log #查看当前的commit内容
git reflog #查看历史的commit内容
1.3 查看commit的具体修改内容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
二、修改commit内容
2.1 如果git commit之后发现commit的message出现了错误,可以用以下的命令修改最近一次commit的message
git commit --amend
之后会出来一个vim编辑界面,直接修改commit message之后,:wq!退出即可
2.2 如果要修改的最近多次的commit message的话按如下的命令进行修改
git rebase -i HEAD~3
命令表示要修改最近3次commit的信息,输入之后会出来如下的信息
pick:*******
pick:*******
pick:*******
按键盘i然后将pick改为edit,之后就可以保存退出,然后通过命令
git commit --amend
来切换进行commit message的修改,在全部修改完成之后,输入下面的命令完成修改
git rebase --continue
三、撤销版本修改
注意git在进行版本控制时,本质上是文件指针的移动
3.1 彻底删除最近的几次commit
git reset --hard 版本号#版本号可以用git log查看
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD~n #回退到n个版本前
注意这条命令会导致当前内容回到你指定的版本,这时你的工作区就是你所指定的版本的内容
另外如果你通过上面的命令进行撤回之后发现其实修改是可以的,想要变回去,也可以通过git reset --hard +版本号来实现
3.2 撤回commit但是保留更改
如果你在还没改完文件就commit,发现还需要加几个字在文件中,就不可以用3.1的命令,因为他会导致你之前做的修改全部丢失,如果你希望撤销commit,但把最近这一次commit的内容放到工作区,则可以通过以下的命令
git reset --soft 版本号#撤销后放到你的工作区
git reset --mixed 版本号#撤销后放到你的暂存区
注:如果你当前commit了一个版本,版本号为7ai923h,你上一次commit了一个版本,版本号为899hslfls,如果你要撤销最近一次的commit,但是保留做好的修改到工作区,你的命令应该是git reset --soft 899hslfls.之后还需要看情况添加一步git restore --staged . 把文件从add状态变成非add状态
3.3 撤回工作区的修改
如果你修改了当前文件,但是还没有将改文件添加到暂存区,也就是还没有执行git add 文件,可以用如下的命令修改
git checkout -- 文件名
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
#注:如果你新建了一个文件,但是还没有add,那么可以直接将该文件删掉,不会影响git的跟踪
3.4 撤销暂存区的修改
如果你修改了并且添加到暂存区但是还没有commit,那么可以用以下的命令将暂存区的修改取出,并放到你的工作区
git reset HEAD 文件名
结合上面的git reset --mixed 文件名,再利用git reset HEAD 文件名,就实现了git reset --soft的效果
四、删除文件
删除文件有两种方法
1、直接在命令行rm test.txt或者直接通过桌面应用删除文件,注意pycharm如果之前设置过自动加入跟踪,会主动把删除文件的操作进行git add操作,用git status查看此时的信息如下:
此时,文件还是未被提交的状态,可以,如果 git commit来实现对删除操作的提交
2、在命令行中 git rm -rf 文件名(目录/)#删除目录时要加r参数,再git commit修改
3、误删文件,如果误删了某文件,希望恢复,其实删除文件也可以视为对问文件的修改,按照上文的撤销一节的方式进行即可
以上面的图片为例,希望恢复package.json文件,那么执行命令,git reset HEAD package.json 和git checkout -- package.json即可
4、希望删除远端上的文件但不希望删除本地文件,如上传文件时不小心把.idea/文件也上传了,为了删除github上的文件,可以这样
git rm -r --cache .idea #--cache删除暂存区的文件,不会删除本地的.idea,
git commit -m "delete .idea dir"
git push -u origin master
五、git rebase用法
1、git rebase -i这里的-i命令指的是interative交互,意思是采用交互的界面对commit进行编辑,完整的命令为:
git rebase -i startpoint endpoint
startpoint endpoint为相应的commit的版本号,如果缺失endpoint,那么默认为此时的HEADcommit,输入命令之后会出现如下的界面,
pick ****
pick ****
将pick修改为对应的命令进行修改,其中主要的命令如下:前面的字母为相应的缩写
p,pick:保留该commit
r,reword:保留该commit,但是修改该commit的注释
e,edit:保留该commit,但是需要修改该commit
s,squash:将该commit和前一个commit合并
f,fixup:将该commit和前一个commit合并,但不保留该提交的注释信息
x,exec:执行shell命令
d,drop:丢弃该commit
六、git分支
1. 创建分支:
git branch//查看所有的分支
git checkout -b tmp//创建并切换到tmp分支
git branch tmp//创建tmp分支
git switch tmp//切换到tmp分支
git checkout tmp//切换到tmp分支
2. 删除分支
git branch -d tmp//删除tmp分支
3. 合并分支
git merge tmp
需要先切换到需要的目标分支之下,再合并分支,注意合并分支的过程中可能会有冲突存在,需要对冲突进行手动处理
七、git添加远程程仓库关联
在本地仓库的命令行中输入:
$ git remote add origin https://github.com/guyibang/TEST2.git
八、git status操作
参考博客——Git Stash用法总结