-
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 pull
fetch
跟pull
有啥区别呢?
fetch
从远程仓库抓取到本地之后不会自动merge
操作,但pull
会自动merge
最后我们进行push
操作
git push
这样我们就可以做到远程仓库和本地仓库的同步了!
上面讲的是一些Git基本操作。
接下来讲讲一些Git进阶小技巧
git commit DefaultYuan.txt -m "fix 具体功能"
git commit -v
git commit -a
这样会默认使用 vi 添加描述,我们也可以在.git/config
的core
中editor = vim
指定编辑器
当然也可以使用-m
选项直接添加提交信息
git commit -a -m "fix 具体功能"
git commit --amend
也可以后面添加参数-m
做到修改
git status
git diff
git diff --cached
git diff HEAD
HEAD
关键字它指的是当前分支的最新提交,相当于一个指针,后续讲到新建分支也会提到它
有时候我们在工作区进行开发并且不想提交的时候,这时我们又想pull
最新代码;或者又想切到另外一个分支上修改紧急bug的时候
git stash可以暂存当前的工作区内容
git stash
等我们切到另外分支修改完了bug之后,可以切回之前分支
git stash pop
git 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_fixHot
git branch dev f0299e2
f0299e2
是随便写的,具体要以我们自己的commit
git checkout dev
分支其实也是指向某个commit
的指针,HEAD
也是一个指针,它指向当前工作目录下的commit
因此checkout
就是让HEAD
指向dev分支
git branch -d dev
git branch -D dev
git branch --set-upstream dev origin/dev_fixHot
git push origin dev:dev
git push origin :dev
或者
git push origin --delete dev
git 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 HEAD
git 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 tag
git tag -a v0.0.1-pro -m "pro发版"
git checkout v0.0.1-pro
git show v0.0.1-pro
git tag -d v0.0.1-pro
git tag -a v0.0.1-pro 9fbc3dd
git push origin v0.0.1-pro
git push origin –tags
在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等,同时自己的Commmit记录也消失了。 不用慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。
git reflog
99abc5a HEAD@{1}: commit: do something
git reset --hard 99abc5a