-
Notifications
You must be signed in to change notification settings - Fork 13
GitPro
自己在工作中常用的git命令行!
当我们要进行Git提交的时候,我们作为提交者要以什么姓名和电子邮件地址进行提交?
git config --global user.name "DefaultYuan"
git config --global user.email [email protected]git config --list上面命令配置好的用户信息可以通过git config --list命令查看用户名、邮箱、别名、remote地址等等!真是一览无遗!当然也可以到.git目录下的查看config文件
git clone https://github.com/DefaultYuan/Git-Pro.git A/B以上命令是将现有的仓库克隆到A目录下的B文件夹里面,如果后面没有添加A/B就会默认新建一个名为Git-Pro文件夹,且将仓库克隆到这个文件夹下面!
当我们在本地修改了文件,比如修改了README.md文件,我们首先查看状态确定哪些文件当前处于什么状态!
git status该命令执行完终端输出如下:
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")当前README.md文件是有做修改的,该文件还没有添加到stage的,提示我们可以通过**git add 来添加,当然我们也可以通过git checkout -- **来撤销本次做到修改,建议不要轻易这么干!后续我会讲讲相关撤销操作。
现在我们加入stage
git add README.md如果我们现在要将本地所有修改的文件进行添加,可以用该命令:
git add .最后,我们进行提交
git commit -m "fix 具体哪个功能"如果本地我们改的内容有点多,涉及到修改多个模块的代码,建议多次添加并提交!
继上面的提交操作之后
我们先拉取一下远程仓库的更新内容
git fetch接下来,我们就可以手动merge远程仓库的修改了
git merge我们为了让我们的提交记录比较美观一些的话,在这里我们会用rebase去代替merge操作
git rebase或者用pull来拉取代码
git pullfetch跟pull有啥区别呢?
fetch从远程仓库抓取到本地之后不会自动merge操作,但pull会自动merge
最后我们进行push操作
git push这样我们就可以做到远程仓库和本地仓库的同步了!
上面讲的是一些Git基本操作。
接下来讲讲一些Git进阶小技巧
git commit DefaultYuan.txt -m "fix 具体功能"git commit -vgit commit -a这样会默认使用 vi 添加描述,我们也可以在.git/config的core中editor = vim指定编辑器
当然也可以使用-m选项直接添加提交信息
git commit -a -m "fix 具体功能"git commit --amend也可以后面添加参数-m做到修改
git statusgit diffgit diff --cachedgit diff HEADHEAD关键字它指的是当前分支的最新提交,相当于一个指针,后续讲到新建分支也会提到它
有时候我们在工作区进行开发并且不想提交的时候,这时我们又想pull最新代码;或者又想切到另外一个分支上修改紧急bug的时候
git stash可以暂存当前的工作区内容
git stash等我们切到另外分支修改完了bug之后,可以切回之前分支
git stash popgit stash list当我们的stash栈列表里面有很多,并且我们想要找到对应的版本号
git stash apply stash@{2}git stash show stash@{2}当我们的stash栈列表的工作内容都应用回来的时候
git stash clear分支在Git里面是比较廉价的,我们在开发的时候可以在本地仓库创建很多条分支
git branch dev这种创建方式会依然停留在当前分支
git checkout -b dev_fixHotgit branch dev f0299e2f0299e2是随便写的,具体要以我们自己的commit
git checkout dev分支其实也是指向某个commit的指针,HEAD也是一个指针,它指向当前工作目录下的commit
因此checkout就是让HEAD指向dev分支
git branch -d devgit branch -D devgit branch --set-upstream dev origin/dev_fixHotgit push origin dev:devgit push origin :dev或者
git push origin --delete devgit cherry-pick f0299e2####在工作中,如果团队开发同一个项目的人数特别多的时候,每个人都在自己的分支上开发
在开发过程中,为了使提交记录直观,方便在一条分支上查看提交记录,可以对分支进行衍合,一般是在做了一些小的修改之后会用它
将修改commit到本地分支上之后
当本地分支上有相对应的远程分支,可以直接使用
git rebase为了方便讲解,origin/dev_homepageFix这个远程分支是随便写的分支名
当这次commit要衍合到dev_homepageFix分支上时
git rebase origin/dev_homepageFix最后就可以push跟远程仓库同步了
####当我们到项目接近尾声的时候,需要将各自的分支都合并到dev分支上去
先抓取最新仓库更新
git fetch然后切到dev分支上
git checkout dev再分别合并各个分支,这里以dev_homepageFix分支为例
git merge origin/dev_homepageFix当我们想去整理我的提交,或者是把不该这次提交的修改提交了,我们可以对修改进行撤销,或者对提交进行撤销
git reset HEADgit reset HEAD README.md我们做了一些修改,然后觉得自己做错了,不想提交
git reset --hard当我们想重新整理提交的时候,比如说将上两次的提交整理到一次提交,我们可以重置到上两次的上次提交commit
git reset 2126dce这种情况也会引发另外一个问题,当我们本地仓库与远程仓库一致的时候,然后我们重置,就需要用到push的force来进行强推,这是我们不想操作的,后续我会讲解一下强推的小建议!
我们也是不要轻易这么去做!
git revert 2126dce##起别名
当我们有比较常用的命令行用的比较频繁,但是我们又觉得完整把它们敲出来费事
#####可以在 ~/.gitconfig 文件里面进行设置别名,添加alias
[alias]
ft = fetch
ck = checkout
st = status
br = branch
rb = rebase
lg = log然后试一下git st就管用了!
标签可以针对某一时间点的版本做标记,常用于版本发布
git taggit tag -a v0.0.1-pro -m "pro发版"git checkout v0.0.1-progit show v0.0.1-progit tag -d v0.0.1-pro
git tag -a v0.0.1-pro 9fbc3ddgit push origin v0.0.1-progit push origin –tags在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等,同时自己的Commmit记录也消失了。 不用慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。
git reflog99abc5a HEAD@{1}: commit: do something
git reset --hard 99abc5a