Git命令行总结

Git命令行

把文件添加到版本库

在创建好的目录下创建新的git版本库

git init 

把文件添加到仓库

git add filename

把文件提交到版本库

git commit -m "message"

查看仓库的当前状态

git status

查看修改内容

git diff filename

时光机穿梭

显示从最近到最远的提交日志

git log

使日志一行显示

git log --pretty=oneline

回退到上一个版本

git reset --hard HEAD^

查看文件中内容

cat filename

去到最新的版本

git reset --hard commitid

获取commit id

git reflog

reflog会记录每一次的命令,以确定要回到未来的那个版本

管理修改

丢弃工作区的修改
git checkout -- filename

  • 命令git checkout -- filename意思就是,把文件在工作区的修改全部撤销,这里有两种情况:
  • 一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  • 总之,就是让这个文件回到最近一次git commitgit add时的状态。

**git checkout -- filename命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 **

丢弃缓存区的修改
git reset HEAD filename

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

删除文件

删除操作说明
rm test.txt :删除工作区的文件
git rm test.txt:删除工作区和缓存区的文件
git commit -m "message":提交操作

撤回操作说明
git checkout -- test.txt

命令git rm file用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

git rm file 删除工作区和暂存区的文件,直接checkout是无法还原的,需要从版本库reset下来,因为暂存区被删了。rm只删除工作区的文件,直接checkout是可以还原的

git checkout其实是用版本库(其中包含了stage或者叫index, 还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD )里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

远程仓库

添加远程库

将本地仓库关联到GitHub仓库
git remote add origin git@github.com:HongyeZhao/learngit.git

git remote add origin git@server-name:path/repo-name.git

添加后,远程仓库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库

把本地库上的所有内容推送到远程库上
git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程

**由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 **

把本地master分支的最新修改推送至GitHub
git push origin master

从远程库克隆

git clone git@github.com:HongyeZhao/gitskills.git

git clone git@server-name:path/repo-name.git

分支管理

创建与合并分支

创建dev分支,然后切换dev分支:
git checkout -b dev

git switch -c dev

**git checkout命令加上-b`参数表示创建并切换,相当于以下两条命令: **

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

切换回master分支
git checkout master

git switch master

切换回master分支后,查看修改的内容,发现并没有修改,这是因为那个提交在dev分支上,而master分支此刻的提交点并没有变**

所以需要

dev分支的工作成果合并到master分支上
git merge dev

**git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。 **

然后删除dev标签
git branch -d dev

查看分支
git branch

小结

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch

切换分支:git checkout或者git switch

创建+切换分支:git checkout -b或者git switch -c

合并某分支到当前分支:git merge

删除分支:git branch -d

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git log --graph命令可以看到分支合并图。

分支管理策略

通常,合并分支时,如果可能,Git会用Fast Forward模式,但是在这种模式下,删除分支后,会丢失分支信息,如果要强制禁用Fast Forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看到分支信息。

合并dev分支,请注意--no-ff参数,表示禁用Fast forward
git merge --no-ff -m "message" dev

小结

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,在Fast forward合并就看不出来曾经做过合并。

BUG分支

修复BUG时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

**当手头的工作没有完成时,先把工作做现场git stash一下, 然后去修复bug,修复后,再git stash pop,回到工作现场; **

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

查看stash内容
git stash list

可以多次stash,回复时,先用git stash list查看,然后回复指定的stash,用命令:

git stash apply stash@{0}

复制一个特定的提交到当前分支
git cherry-pick <commitid>

即将某分支上的修改提交到当前分支

Feature分支

强行删除分支(即分支未被合并就需要删除)
git branch -D feature-vulan

多人协作

查看远程库的信息
git remote

显示更详细信息

git remote -v

-v会显示可以抓取和推送的origin的地址,如果没有推送权限就看不到push地址

推送分支
git push origin <branch>

抓取分支
git pull

如果有冲突,就先处理冲突

在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name

本地和远程分支的名称最好一致

建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name

标签管理

创建标签

给当前的提交打上标签
git tag v1.0

标签默认是打在最新提交的commit上的。

查看标签
git tag

给过去的提交打上标签
git tag v0.9 commitid

查看标签的内容
git show v0.9

创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v0.1 -m "version 0.1 released" commitid

小结
  • 命令git tag用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。

操作标签

删除本地标签
git tag -d v0.1

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 如果推送某个标签到远程,如下

推送标签到远程
git push origin v1.0(tagname)

或者一次性推送全部尚未推送到远程的本地标签

git push origin --tags

删除远程标签
  1. 先删除本地标签

    git tag -d v0.9(tagname)
    
    
  2. 然后从原地删除,删除命令样式push,但是格式如下

    git push origin :refs/tags/v0.9
    
    
小结
  • 命令git push origin可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d可以删除一个本地标签;
  • 命令git push origin :refs/tags/可以删除一个远程标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值