Git的学习笔记-常用命令

当使用$git diff filename时,filename中的中文差异部分显示为乱码。
原因如下:git diff接受的编码格式utf-8;而filename又是以gb2312格式编写的,所以git diff命令就显示乱码。
解决方法:filename文件另存为utf-8的编码格式


团队多人协作下需要首先定义好换行符的标准,是按win的CRLF还是UNIX下的LF或者是mac下的CR!!!
git config --global core.autocrlf false :禁用git换行符的自动转换功能
git config --global user.name "用户名" :使用该用户名登陆git
git config --global user.email "[email protected]" :使用该email登陆git
//git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,global全局的
cat +文件名 :在git里面显示文件内容,即文档内容

git init :将当前所在的文件夹设置为git的版本库,会在当前目录下创建.git文件夹, .git文件是用来跟踪管理版本的
git rm +文件名                          :删除某一个文件
git rm -rf +文件名 :将该文件夹/文件,连同文件夹下的东西也一起删除,当我们不需要某个版本库的时候可使用:git rm -rf .git(慎用!)
git add +文件名 :添加工作区(workspace-即本地的文件)的文件到暂存区(stage/index -暂存区在.git文件夹里面)
git commit -m +"注释说明" :将暂存区的所有文件提交到本地仓库(Respository)/也叫分支(master branch),每次提交都会记录,我们将这个记录称之为版本双引号内的注释说明会在我们使用git log的时候显示出来,用来备注我们自己提交了什么,方便我们自己查看
git status :查看当前工作区和暂存区的文件状态-是否修改、新增、删除
git diff +文件名 :是工作区(work dict)和暂存区(stage)的比较:对比显示出目标文件在工作区和暂存区的不同之处
git diff --cached +文件名 :是暂存区(stage)和分支(master)的比较,记住暂存区是add文件后文件才会在暂存区
git log :查看提交记录/版本的日志,版本号为一序列无意义的数字+小写英文
git log --pretty=oneline :同上,查看提交记录/版本的日志,但精简为一行,看起来更方便
git reflog :查看所有命令的日志,包括提交版本、回退版本等所有的记录,包括回退版本之前的版本、已被覆盖的版本
git reset --hard +版本号 :回退到指定版本-将工作区的所有文件重置为 该版本号的文件,版本号一般写前面五位系统即会自动识别
git reset --hard HEAD^ :回退到上一个版本
git reset --hard HEAD^^ :回退到上上个版本
git reset --hard HEAD~x :回退到往上数第x个的版本
git checkout --文件名 :丢弃工作区的修改,这时系统内部的操作是用暂存区的同一文件覆盖掉工作区的文件,如果暂存区没有文件,就用分支上的同一文件覆盖
git ls-files :显示仓库中的文件

远程仓库(Remote)   (remote-name远程仓库名)
//连接远程仓库前得先创建SSH Key!!本地git仓库和远程仓库的传输的是通过SSH加密的
ssh-keygen -t rsa –C “[email protected] :创建SSH,将公钥里面的内容粘贴到github页面的SSH Key里面,生成一个Key


git remote add origin [email protected]:用户名/远程仓库名.git :SSH方式,连接远程仓库,添加一个地址为git@...,别名为origin的远程仓库
git remote add origin https://github.com/用户名/远程仓库名.git :https方式,连接远程仓库,与上面的SSH方式不同的是,这种每次push需要输入用户名和密码!!不推荐
git push -u origin master :第一次将本地仓库当前的分支master推送到远程仓库origin上!需要加-u
git push origin master :以后每次推送就不用加-u了,直接git push +仓库别名 + master
git clone https://[email protected]:用户名/远程仓库名.git :克隆远程仓库到当前文件夹下,不能少了https://
git remote show [remote-name] :查看远程仓库的更多信息
git remote set-url [remote-name] [url] :修改远程仓库的地址,常用于地址错误或将https地址改为SSH地址
git remote rename 远程仓库名 abc1234 :修改远程仓库的名字为abc1234
git remote rm 远程仓库名 :删除远程仓库

关于push:
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,git push origin master这条命令才能生效。 
当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 
你必须先将他们的工作 pull 拉取下来并将其合并进你的工作后才能推送。
这点和下面的 <2、新建好的仓库如果存在新的文件 >是一样的,详见下面使用多个远程仓库的第二点。。。

使用多个远程仓库-将文件推送到另一个远程仓库
1、首先在github上先建一个远程仓库,建好后可执行以下命令
git remote :查看所有已建立连接的远程仓库,只显示仓库别名
git remote -v :查看所有已建立连接的远程仓库,显示仓库别名和仓库的url地址
git remote add <shortname> <url>   :将该新的远程仓库与本地建立连接
2、新建好的仓库如果存在新的文件 :README.md,但本地目录却没有,如果直接使用(git push -u 远程仓库别名 master)提交会报错:error: failed to push some refs to ...,原因为github中的README.md文件不在本地代码目录中,要进行合并
git pull --rebase 仓库别名 master :将远程仓库的东西与本地工作区进行合并,此处需注意工作区必须为clean干净的!!否则也会报错工作区如果不是干净的,会报错error: cannot pull with rebase: You have unstaged changes.需要commit干净
合并完成后本地工作区就多了README.md文件,接下来就可以push了
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git push -u 仓库别名  master :将master分支推送到远程仓库

rebase这个命令做了以下内容: 
a.把你 commit 到本地仓库的内容,取出来放到暂存区(stage)(这时你的工作区是干净的) 
b.然后从远端拉取代码到本地,由于工作区是干净的,所以不会有冲突 
c.从暂存区把你之前提交的内容取出来,跟拉下来的代码合并
所以 rebase 在拉代码前要确保你本地工作区是干净的,如果你本地修改的内容没完全 commit 或者 stash,就会 rebase 失败

分支管理(主分支master ,次分支)
git checkout -b dev123         :创建一个叫dev123的分支,git checkout命令加上-b参数表示创建并切换,dev-device设备,相当于两条命令:git branch dev123 (创建分支)和git checkout dev123(切换分支)
git branch -d +分支名 :删除该分支
git branch :查看当前所有分支
git branch -a :查看所有分支,包括本地分支和远程仓库分支
git merge +分支名 :得先切换回到master主分支后:git checkout master  ,才能合并该分支到master主分支上,merge融合、混合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章