$ git config --global user.name "username"
$ git config --global user.email "email"
其中–global参数表示该台机器所有Git仓库都会使用这个配置。
##Git文件管理
本地创建一个文件,如test.txt
$ git add test.txt //将文件要提交的所有修改放到暂存区,准备提交,如果不添加到暂存区,文件就是Untracked状态, Git就无法跟踪文件的修改
$ git commit -m "explanation" //将所有文件提交到分支,其中-m指的是后面的输入是本次提交的说明
假如新建了多个文件,可以多次使用add指令,再commit一次,如
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
由于Git跟踪并管理的是修改,所以在修改文件时,修改完成需要先使用add,再使用commit,否则修改无法提交。
如第一次修改–>add–>第二次修改–>commit,第二次修改并不会被提交,同步到Git的只有第一次修改
$ git status //查看仓库当前状态,获取文件增删改信息(只能知道哪个文件被修改了,但不知道修改了什么)
$ git diff test.txt //查看test.txt文件与上次修改的不同在哪
常用两者来避免错误的修改,检查无误之后就可以通过add和commit指令添加到git上
$ git log //查看修改日志
$ git log --pretty=oneline //只看版本号和提交说明(简略版日志)
在Git中,用HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示上100个版本
$ git reset --hard HEAD^ //回退到上一个版本
$ git reset --hard xxxxx //回到未来的版本,其中xxxx为该版本版本号(commit id)的前几位
$ git reflog //查看历史所有版本,通过该命令即使回到了历史版本也能找到未来版本的版本号,方便回到未来版本
$ git checkout -- test.txt //把test.txt文件在工作区的修改全部撤销(使用commit提交前)
$ git reset HEAD test.txt //把暂存区的修改撤销掉,重新放回工作区
前者是丢弃工作区修改,后者是丢弃暂存区修改
在本地删除文件test.txt
$ git rm test.txt //在版本库中删除文件
$ git commit //提交
倘若在本地误删了文件,可以通过指令
$ git checkout -- test.txt //还原误删文件
远程仓库,即让GitHub充当服务器免费托管Git仓库。可以让本地和GitHub上的Git仓库远程同步,这样既能让GitHub上的仓库作为备份,又可以让其他人通过该仓库来协作。
用于本地库已存在,要新建个远程库
在GitHub上选择Create repository创建新的Git仓库
在本地相应的Git仓库上运行命令:
$ git remote add origin [email protected]:username/projectName.git //将本地已有仓库与GitHub上新建的Git仓库相关联,username是GitHub账户名,projectName是仓库名
$ git push -u origin master //将当前分支master推送到远程库中,加上-u使Git在将本地master分支内容推送到远程新的master分支的同时,将本地和远程的master分支关联起来,以后推送拉取时刻简化命令
今后本地做了提交,只需通过命令:
$ git push origin master //把本地master分支的最新修改推送到GitHub
用于远程库已存在,要新建个本地库
$ git clone [email protected]:username/projectName.git //方法一
$ git clone https://github.com/username/projectName.git //方法二
$ git branch name //创建新的分支,name为分支名称
$ git checkout name //切换到分支name
$ git checkout -b name //创建并切换到分支name,即前两条指令的合并
$ git branch //查看分支,其中当前分支前面会标上*号
$ git merge name //将分支name合并到当前分支
$ git branch -d name //将分支name删除
合并分支时,Git会尽可能用Fast forward模式,即更换指针指向,该模式下,删除分支会丢掉分支信息。但是可以用指令$ git merge --no--ff name
强制禁用Fast forward模式
冲突的出现是因为两个分支提交内容不一致且不能通过改变指针指向解决,此时Git会告诉我们发生了冲突,使用$ git status
可以查看冲突文件,cat test.txt
可以查看冲突位置,手动修改解决冲突之后,再提交就能完成合并。
$ git log --graph --pretty=oneline --abbrev-commit //查看分支合并情况,分支合并图
当然,通过可视化Git管理软件如SourceTree等解决冲突会方便得多
master分支是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
dev分支是不稳定的,干活都在dev分支上,到版本发布时,再把dev分支合并到master上,在master分支发布;
团队每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
$ git stash //储藏工作现场
$ git stash list //查看储藏的工作现场列表
$ git stash apply //恢复工作现场,但不删除stash内容
$ git stash drop //删除stash内容
$ git stash pop //恢复工作现场的同时删除stash内容
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,可以通过指令$ git stash
把当前工作现场“储藏”起来,然后去修复bug,修复后,再通过指令$ git stash pop
,恢复工作现场。
添加新功能时,最好新建一个分支。
丢弃一个没有被合并过的分支,可以通过指令$ git branch -D name
实现(注意是大写D)。
$ git remote //查看远程仓库的信息
$ git remote -v //查看远程仓库的详细信息
$ git push origin master //推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本 //地分支,如master,Git会把该分支推送到远程库对应的远程分支上
$ git pull //从远程抓取分支
$ git checkout -b name origin/name //在本地创建和远程分支对应的分支,name为分支名
$ git branch --set-upstream name origin/name //建立本地分支和远程分支的关联