Git知识:
- Working Directory - 工作目录。Git仓库位于工作目录之下,工作目录下的文件有加入Git仓库(tracked)和没加入Git仓库(untracked)的区别。
- Stage Area - 暂存区。如上所述,已加入Git仓库并被修改(尚未提交)的文件。
- Local Repository - 本地仓库。
- Remote Repository - 远程仓库。
git初始化 (了解如何初始化仓库)
- git init // 初始化一个文件夹作为一个仓库
- ssh-keygen -t rsa -C “您的邮箱地址” // 生成id_rsa秘钥文件在用户目录的.ssh文件下
- git config –list // 查看当前配置的用户名和邮箱
- git config –global user.name // 更改用户名
- git config –global user.emeil // 更改用户邮箱
- git config // 利用这个命令可以新增、更改Git的各种设置,例如’git config branch.master.remote origin’就将master的远程版本库设置为别名叫做origin版本库
增加删除文件
- git add [file] // 添加文件到文件暂缓区
- git add [dir] // 添加文件夹到文件暂缓区
- git add . // 添加所有文件
- git rm [file] [file] // 删除文件,并且放入暂缓区
- git rm –cached [file] // 停止追踪指定的文件,保留在工作区内(把特定文件从暂存区删除)
- git mv [origin file name ] [new file name] // 更改文件名字,并保存在暂缓区内
代码提交
- git commit -m [mssge] //提交暂缓区到仓库区
- git commit [file] [file] //提交文件
- git commit -a //提交工作区自上次commit之后的所有变化
- git commit -v //commit之后显示所有的diff信息
- git commit –amend -m [message] //如果没有任何新的改变,则更改上一次commit的提交信息
- git commit –amend [file] [file] //重做上一次commit并提交本次的变化
分支(branch)操作相关命令
- git branch // 查看本地分支
- git branch -r // 查看远程分支
- git branch [name] //创建本地分支 —-注意新分支创建后不会自动切换为当前分支
- git branch –set-upstream <分支> <主机名/分支> // 手动建立追踪关系
- git branch -a // 查看所有分支
- git branch -d [name] // 删除分支:—- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
- git branch –track [branch] [remote branch] // 新建一个分支,与远程分支进行关联
- git checkout [name] // 切换分支
- git checkout -b [name] // 创建新分支并立即切换到新分支
- git checkout projectname // 转换分支
- git push origin [name] // 创建远程分支(本地分支push到远程)
- git push origin :heads/[name] // 删除远程分支
- git push origin test:master // 提交本地test分支作为远程的master分支 //好像只写这一句,远程的github就会自动创建一个test分支
- git push origin test:test // 提交本地test分支作为远程的test分支。如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
- git push origin –delete [branch name] //删除远程分支
- git merge [name] //合并分支: —-将名称为[name]的分支与当前分支合并
- git cherry-pick [commit] //选择一个commit,与当前分支进行合并
远程仓库相关命令(主要指本机下的远程主机的别名)
- git clone git://github.com/jquery/jquery.git
- git clone -o <主机名> <地址> // 克隆的时候指定主机名
- git remote -v // 查看远程主机以及名称,以及当前项目远程连接的是哪个仓库地址。
- git remote add <主机名> <网址> // 添加远程主机和名称
- git remote show <主机名> // 查看本季下主机名和远程网址的详细信息
- git remote remove <主机名> // 删除远程主机
- git remote rename <原主机名> <新主机名 > // 重命名远当前的主机连接
- git remote update <分支名> //更新与上游分支同步
标签
- git tag //列出所有的tag
- git tag [name] //为当前的缓冲区加tag
- git show [tagname] //查看tag项目的信息
- git push [remote] [tagname] //推送tag到远程
- git push [remote] –tags //推送所有的tag到远端
- git checkout -b [branch] [tagname] //新建某个branch指向某个tag
查看信息
- git log // 查看日志
- git status // 显示有变更的文件信息
- git log state // 查看推送的历史消息
- git log –follow // 查看当前文件的历史提交信息包括文件改名
- git whatchanged [file] //查看历史变动信息
- git log -p [file] // 显示指定文件的每一次diff
- git blame [file] // 显示具体是什么人在什么时候修改以及信息
- git diff // 显示暂缓区和工作区文件的变动
- git diff HEAD // 显示工作区与最新commit之后的仓库区的区别
- git diff [branch1]…[branch2] // 显示两次提交的区别
- git show [commit] // 显示某次提交的原数据和内容的变化
- git show [commit]:[file] // 显示某次提交某个文件的变化
- git reflog // 显示最近几次的提交
远程同步
- git checkout filename //将本地的文件恢复到与远程仓库版本一致的文件。
- git chekcout . //恢复所有的文件
- git fetch [remote] //下载远程仓库的所有变动
- git push [remote] –force //强行推送即使有冲突
- git push [remote] –all //推送所有的分支到远程仓库
- git pull [remote] [branch] //取回远程仓库的变化
- git push -u origin master //将本地的项目提交到远程仓库中。
- git reset HEAD //清空暂存区
- git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如’git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20’,Git的版本号都是生成的一个哈希值
- git fetch -all //只是下载远程的库的内容,不做任何的合并,加下一句可以强制更新
- git reset –hard origin/master //把HEAD指向刚刚下载的最新的版本
建立子模块
- git submodule add <仓库地址> <路径> // 为工程添加submodule,删除submodule,稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。
- git submodule update –init –recursive // 当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行上述命令
// 删除子模块,需要先把子模块文件删除,这个还不会把git内容从work tree上移除,只会从.git/config删除关联
git submodule deinit subModuleName
//从work tree上移除子模块
git rm subModuleName
//在删除之后从work tree上保留子模块
git rm --cached subModuleName
合并
- git rebase <主机名> // 当当前代码与远程仓库分叉,也就是本地更改了东西,远程也更新了东西,这个方法可以,解决冲突,但是不会以分叉的形式展示。与git merge的区别可以参考该博客。
- git rebase –continue // 当有冲突时,解决后此命令可以继续合并
- git rebase –abort // 向结束合并时,通过此命令完成
- git merge <分支名> // 合并当前分支和另一分支
- git pull –rebase // 表示把本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到”.git/rebase”目录中),然后把本地当前分支更新为最新的远程分支,最后把保存的这些补丁应用到本地当前分支上
缓存
- git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来
- git stash pop // 回退stash
- git stash list // 列出stash记录
多账号
1.新建USER2的SSH Key
# 进入SSH目录
$ cd ~/.ssh
# 新建SSH Key
$ ssh-keygen -t rsa -C "user2@mail.com"
# 设置名称为id_rsa_github,其他的步骤可以回车即可,按照github上的教程
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_github
2.将密钥添加到SSH agent里,由于默认只读取id_rsa,通过agent可以识别其他密钥
ssh-add ~/.ssh/id_rsa_github
如果出现问题,可以尝试:
ssh-agent bash
ssh-add ~/.ssh/id_rsa_github
3.修改config文件,如果没有就创建一个
# 如果没有就创建一个,有的话就在后面继续添加就可以
touch config
# 以下是文件内容
Host git@github.com
HostName github.com
User git
IdentityFile C:/Users/Administrator/.ssh/id_rsa_github
4.将新的id_rsa_github.pub拷贝,然后复制到Github上
5.测试:
ssh -T git@github.com
使用git的团队合作规范,一般是gitlab
1.先fork团队项目到自己的远程仓库,然后git clone到本地。
2.当完成了功能的开发,add然后commit改动和需要提交的文件。更新文件信息的固定的格式按照规定。
3.pull远程将要提交的团队项目到本地,先解决冲突。然后push到自己的远程分支。
4.申请merge request,让同事review。
问题
- error:failed to push some refs to …
原因是:远端上的代码版本和本段的不一致
解决方法:强制覆盖版本或者更新版本,方法分别是,git push -f或者git fetch && git merge等价于git pull - warning: LF will be replaced by CRLF问题
解决方法:Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同风格的换行符。这个功能的选项如下:
false - 不做任何检查
warn - 在提交时检查并警告
true - 在提交时检查,如果发现混用则拒绝提交
建议使用最严格的 true 选项。
windows中 git config –global core.autocrlf false