Git 实用命令总结

初始化一个目录

git init

添加本地修改的文件

git add .

其中.表示添加当前目录下面所有修改&新增的文件,如果想单独add指定目录或文件将.替换成目录或文件地址就可以了

提交更新

git commit -m '注释'

这里的提交是提交到了本地仓库.

删除文件

git rm file/dir

直接使用shell进行rm file操作后版本还需要使用git rm file命令从版本库从删除文件,其中如果是删除目录,需要增加一个-r参数

查看提交历史

git log

git log命令能查看所有版本的提交历史以及每次提交的版本号和注释,并且每次提交都会有一个唯一的版本号。

使用git log --graph能够以’图’的方式更形象的展示提交记录,如果像显示的简洁一点,可以再加一个 –oneline 参数,就能把每一个提交合并到一行显示

HEAD

HEAD是git中一个特殊的指针,指向当前的分支的最新的一个commit,这个概念很重要。 HEAD^表示当前分支的上一个commit版本, HEAD^^表示上上个版本,也可以用HEAD~n进行表示,n代表之前第几个版本

  • 如果本地修改了一些东西,不想要了,可以用命令git reset --hard HEAD恢复到上次提交后的版本。
  • 如果想恢复上上个版本,可以用命令git reset --hard HEAD^^
  • 如果想根据版本号恢复到指定版本可以用命令git reset --hard COMMIT_VERSION.,COMMIT_VERSION表示版本号

使用git rest命令回退版本后再使用git log命令查看提交记录时发现当前版本之后的记录都没有了。如果此时又想恢复到当前版本之后的一个版本,可以用git reflog查看git的每次操作记录,从里面找到版本好,然后重新使用git reset命令就可以进行恢复了

暂存区

也可以称为’工作目录/working directory’上一次提交后的所有更改都被保存在’暂存区’,可以通过git status命令查看当前暂存区中所有的更改,当使用git add/rm 等命令操作时,实际上是对暂存区的操作,当使用git commit命令时,会将暂存区的内容一次性提交到当前分支。

比对文件 git diff

git diff file

可以通过git diff查看一个文件与当前HEAD版本中这个文件内容的区别。

也可以通过git diff COMMIT_VERSION 比对某个版本与当前暂存区文件内容的区别,如果不指定COMMIT_VERSION,默认为HEAD

也可以通过git diff COMMIT_VERSION file比对指定文件某个版本与当前展存区的区别

还可以通过git diff COMMIT_VERSION_1 COMMIT_VERSION_2 比较两个版本之前的区别。同样在后面可以再加一个文件路径,查看指定文件之前的区别

撤销修改

git checkout -- file

注意,一定要使用 – ,如果不使用 – 就代表切换分支

如果在commit之前想要撤销对某个文件进行修改,如果该文件还没被add操作,可以使用git ckeckout -- file命令将文件内容撤销到上一次提交后的内容,也就是HEAD版本的内容,。 如果该文件已经被add了,直接使用checkout,文件回会退到add时的内容,如果连上次add时的内容也需要撤销,可以先使用git reset file命令将文件从暂存区中撤销,此时文件就会回到add前的状态,然后再使checkout进行撤销操作。使用reset命令对暂存区文件进行操作时,会将暂存区文件移出暂存区,而不是回退版本

恢复被删除的文件

git checkout -- file

注意,一定要 – 否则checkout就代表切换分支了。 使用该方法恢复文件的前提是被删除的文件只是本地rm,还没有被commit,如果文件已经提交了,那么就需要使用git reset 命令进行恢复了。

指定文件恢复到指定的版本

git reset 版本号  文件路径
git checkout -- 文件路径

注意恢复指定文件到指定版本需要两个步骤,第一步是reset,此时只是将当前HEAD中的这个文件内容恢复到了reset的版本号内容,此时使用git status命令会看到这个这个文件出现在了暂存区,接下来再使用checkout命令将放弃暂存区该文件的修改。文件就真正恢复到了指定的版本。

添加一个远程仓库

git remote add origin remoteRespPath

其中origin是随便定义的,是给远程仓库取个别名,remoteRespPath是远程仓库的地址,可以添加多个远程仓库,保证给远程仓库取的别名不同就可以了

查看远程仓库信息

查看原创仓库名称列表  git remote
查看原创仓库详细信息  git remote -v

push代码到远程仓库

git push remoteRespName localBranch:remoteBranch
eg: git push origin master:master

其中origin为之前添加远程仓库时取的别名,localBranch为本地分支的名称,remoteBranch为远程仓库分支的名称,git push origin master:master 会将本地仓库的master分支push到远程仓库origin的master分支上面去

每次push前最好先pull一下。如果有简单冲突会自动合并,如果有严重冲突,解决冲突后再push,如果其他人在上次pull之后又push了内容上去,那么你这次push将会报错。

如果本地仓库的HEAD版本低于远程仓库中HEAD版本,可以加上一个-f参数强制push,出现这种情况一般是由于本地仓库使用reset命令会退版本导致的。另外push到远程仓库后,其他人的本地仓库直接使用git pull命令也是不能直接将内容更新下来的,因为其他人本地仓库的HEAD版本又高于远程仓库的HEAD版本了,所以git认为不需要更新内容下来,此时在pull的时候也加上一个-f参数强制更新。

从远程仓库pull代码到本地仓库

git pull remoteRespName branch
eg: git pull origin master

其中remoteRespName表示仓库别名,branch是分支名称, git pull origin master 会将远程仓库origin的master分支代码pull到本地

clone

git clone remoteResp

remoteResp代表远程仓库的地址,除了在本地初始化一个工程,然后push到远程仓库,也可以通过git clone命令从远程仓库clone一个已存在的工程到本地,当从远程仓库clone工程到本地后,默认在master分支上,并会自动的加上一个名为origin的远程仓库,地址就是clone时远程仓库的地址。

默认只会从远程仓库clone下master分支,如果要切换到其他分支,可以在clone后再使用git checkout -b newBranchName origin/newBranchName命令将远程某个分支也checkout下来。

除了直接将远程分支checkout下来,也可以先在本地创建一个分支git checkout -b branch01,建立好了之后,此时进行pull操作会报错,因为该本地分支还没有关联一个远程仓库的分支,接下来使用git branch --set-upstream-to=origin/branch01 branch01就能够将本地创建的branch01分支与远程仓库origin下面的branch01分支进行关联起来了,此时就可以进行pull操作了。

创建分支

git branch newBranchName
eg : git branch laibao

上面的命令将会创建一个laibao的分支,创建分支后,你目前还是在当前分支,如果要切换到新分支可以用切换分支命令

切换分支

git checkout branchName
eg : git checkout laibao

上面的命令将会切换到laibao分支上面,接下来可以在新分支上面修改内容,然后本地commit,然后可以通过git push origin laibao:laibao命令将本地laibao分支push到远程仓库中

对于上面两个命令其实可以用一个命令代替git checkout -b newBranchName,表示创建新分支,并切换到这个分支上面

删除分支

git branch -d branchName
上面的命令时删除本地分支,如果该分支还没有被合并,git会提示合并失败,可以使用 -D参数强制删除分支
如果需要将远程仓库中的分支也删除掉可以用 git push remoteRespName --delete branchName 

合并分支

比如要将b分支合并到a分支 <br/>
首先切换到a分支  git checkout a <br/>
然后合并  git merge b <br/>
还可以通过-m参数指定合并备注<br/>
就能完成合并操作了。 <br/>
如果合并冲突了,会提示合并冲突,接下来打开冲突的文件,解决冲突,然后commit。就合并完成了。<br/>
合并分支时一般加上 --no-ff参数,表示不使用 Fast Forward模式,如果不加这个参数,默认使用的就是Fast Forward模式,导致合并后删除原来的分支后,看不出主分支曾经合并过

存档

存档
git stash
查看存档列表
git stash list
恢复存档
git stash apply 存档id
删除存档
git stash drop 存档id
上面的恢复和删除可以用下面的命令合并操作
git stash pop 存档id

当在当前分支工作了一段时间临时需要切换到其他分支,但是当前分支的内容都不能被提交,这个时候可以先使用命令log stash将当前工作目录进行存档,然后checkout到其他分支工作,最后再checkout回来当前分支,再使用log stash list命令查看存档列表,接着使用log stash pop 存档id就能接着之前的内容进行开发了。

如果上面不先存档,也不提交,直接checkout到其他分支,会有问题,要么冲突,要么将当前修改的内容一并带到checkout后的分支了。

忽略指定文件/目录

可以在根目录下添加一个.gitignore文件,文件里面指定要忽略的文件和目录
如:

.idea/*
target
.settings/*
.classpath
.project
.DS_Store
logs
Makefile
*.iml
*/log/*
*.dat

别名 alias

如果某些命令太长了,写起来很麻烦,可以给某些操作起别名,比如git commit 可以用git ci代替就更好了,那么可以为commit设置别名,设置方法为git config --global alias.ci "commit",那么以后就都可以使用git ci代替git commit了, 如果加了–global表示对当前用户有效,配置的别名保存在~/.gitconfig文件中,如果没加–global参数,则只对当前仓库有效,保存在./.git/config文件中。可以直接编辑配置文件添加别名。

添加一些有用的别名:

git config --global alias.unstage 'reset HEAD'
// "git unstage xx.txt" 相当于 "git reset HEAD xx.txt" 命令
git config --global alias.ci 'commit'
git config --global alias.br 'branch'
git config --global alias.co 'checkout'
git config --global alias.logx 'log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit'
//这个就牛x了,配置好了之后,可以是试试"git logx"命令
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值