Git操作

臭大佬 2019-09-21 20:52:59 3781
Git 
简介 Git操作

创建

 

git init //初始化git仓库
git init <project-name> //新建一个目录,将其初始化为Git代码库
git status <filename> //查看git仓库状态
git diff <filename>  //查看文件修改过的地方
git add <filename>  //添加文件到暂存区
git commit -m "blablabla..." //提交文件到版本库
git commit --amend  //对上一次的提交做修改

 

配置

 

git config –list //显示当前的Git配置
git config -e <--global> //编辑Git配置文件
git config <--global> user.name "<name>" //设置提交代码时的用户名
git config <--global> user.email "<email address>" //设置提交代码时的用户邮箱地址

 

增加/删除文件

 

git add <file1> <file2> ...  //添加指定文件到暂存区
git add  <dir> //添加指定目录到暂存区,包括子目录
git add . //添加当前目录的所有文件到暂存区
git add -p //对于同一个文件的多处变化,可以实现分次提交
git rm <file1> <file2> ... //删除工作区文件,并且将这次删除放入暂存区
git rm --cached <file> //停止追踪指定文件,但该文件会保留在工作区
git mv <file-original> <file-renamed> //改名文件,并且将这个改名放入暂存区
git checkout -- file.php  //git撤回某文件的修改

 

代码提交

 

git commit -m <message> //提交暂存区到仓库区
git commit <file1> <file2> ... -m <message> //提交暂存区的指定文件到仓库区
git commit -a //提交工作区自上次commit之后的变化,直接到仓库区
git commit -v //提交时显示所有diff信息
git commit --amend -m <message> //使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend <file1> <file2> ... //重做上一次commit,并包括指定文件的新变化

 

远程库操作

 

git remote -v //查看远程仓库
git remote add origin git@server-name:path/repo-name.git  //关联远程库(github已创建)
git push -u origin master   //关联后第一次推送
git push origin master   //平常推送
git pull <remoteName> <localBranchName>  //拉取远程仓库
git clone git@server-name:path/repo-name.git //克隆仓库

//git修改远程仓库地址,方法有三种:
1.修改命令
git remote origin set-url [url]
2.先删后加
git remote rm origin
git remote add origin [url]
3.直接修改config文件

 

版本回退和撤销修改

 

git log //查看历史版本
git log --pretty=oneline //查看简要历史版本(可以查看更多版本)
git reset --hard HEAD^ //版本回退(上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)
git reset --hard <commit id> //版本回退第二种命令, 用commit 的id 来指定版本回退
git reflog //查看命令历史, 可查看每次的命令操作 id 来进行历史操作的任意跳转(用到上面的命令)
git checkout -- <filename>  //撤销文件在工作区的修改

 

标签

 

git tag //列出当前所有标签
git tag -a <tagname> -m "blablabla..."  //添加新标签
git tag <tag> //新建一个tag在当前commit
git tag <tag> <commit> //新建一个tag在指定commit
git checkout -b <branch> <tag> //新建一个分支,指向某个tag
git push <remote> <tag> //提交指定tag
git push <remote> --tags //提交所有tag
git tag -d <tag> //删除本地tag
git push origin :refs/tags/<tagName> //删除远程tag
git push origin :refs/tags/<tagname>  //删除远程指定标签
git push origin --tags //推送所有标签到远程库
git show <tag> //查看tag信息

 

分支

 

git branch 查看当前所有分支
git branch -r列出所有远程分支
git branch -a列出所有本地分支和远程分支
git branch -vv  查看本地分支和远程分支都有映射关系
git branch <branchname> 创建分支,但依然停留在当前分支
git checkout -b <branch> origin/<branch> 新建一个分支,并切换到该分支。采用此种方法建立的本地分支会和远程分支建立映射关系。
git fetch origin 远程分支名x:本地分支名x  //拉取远程分支并创建本地分支。采用此种方法建立的本地分支不会和远程分支建立映射关系。
git branch <branch> <commit> 新建一个分支,指向指定commit
git branch --track <branch> <remote-branch>  //新建一个分支,与指定的远程分支建立追踪关系
git checkout <branch> //切换到指定分支,并更新工作区
git checkout - //切换到上一个分支
git merge <branch> //合并指定分支到当前分支
git cherry-pick <commit> //选择一个commit,合并进当前分支
git log --graph //查看分支的合并情况
git branch --set-upstream-to=origin/<branch> <branch> //建立追踪关系,在现有分支与指定的远程分支之间
git branch -u origin/分支名  本地分支和远程分支都有映射关系
git branch -d <branchname> //删除分支
git push origin --delete <branch-name> //删除远程分支
git branch -dr <remote/branch> //删除远程分支

 

查看信息

 

git status //显示有变更的文件
git log //显示当前分支的版本历史
git log --stat //显示commit历史,以及每次commit发生变更的文件
git log -S <keyword> //搜索提交历史,根据关键词
git log <tag> HEAD --pretty=format:%s //显示某个commit之后的所有变动,每个commit占据一行
git log <tag> HEAD --grep feature //显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log --follow <file> //显示某个文件的版本历史
git whatchanged <file> //显示某个文件改名的版本历史
git log -p <file> //显示指定文件相关的每一次diff
git log -5 --pretty --oneline //显示过去5次提交
git shortlog -sn //显示所有提交过的用户,按提交次数排序
git blame <file> //显示指定文件是什么人在什么时间修改过
git diff //显示暂存区和工作区的差异
git diff --cached <file> //显示暂存区和上一个commit的差异
git diff HEAD //显示工作区与当前分支最新commit之间的差异
git diff <first-branch>...<second-branch> //显示两次提交之间的差异
git diff --shortstat "@{0 day ago}" //显示今天你写了多少行代码
git show <commit> //显示某次提交的元数据和内容变化
git show --name-only <commit> //显示某次提交发生变化的文件
git show <commit>:<filename>  //显示某次提交时,某个文件的内容
git reflog //显示当前分支的最近几次提交

 

远程同步

 

git fetch <remote> //下载远程仓库的所有变动
git remote -v //显示所有远程仓库
git remote show <remote> //显示某个远程仓库的信息
git remote add <shortname> <url> //增加一个新的远程仓库,并命名
git pull <remote> <branch> //取回远程仓库的变化,并与本地分支合并
git push <remote> <branch> //上传本地指定分支到远程仓库
git push <remote> --force //强行推送当前分支到远程仓库,即使有冲突
git push <remote> --all //推送所有分支到远程仓库

 

撤销

 

git checkout <file> //恢复暂存区的指定文件到工作区
git checkout <commit> <file> //恢复某个commit的指定文件到暂存区和工作区
git checkout . //恢复暂存区的所有文件到工作区
git reset <file> //重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset --hard //重置暂存区与工作区,与上一次commit保持一致
git reset <commit> //重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard <commit> //重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep <commit> //重置当前HEAD为指定commit,但保持暂存区和工作区不变
git revert <commit> //新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
git stash //暂时将未提交的变化移除,稍后再移入
git stash pop

 

其他

 

git archive //生成一个可供发布的压缩包
//清除保存好的账号密码
git config --system --unset credential.helper
//git删除本地所有未提交的更改
git clean -n://显示 将要 删除的 文件 和  目录
git clean -f: //删除当前目录下 untracked 文件,除过 .gitignore 里的文件或文件夹(删除 文件)
git clean -f <path> : //指定路径下
git clean -df://删除当前目录下 untracked 文件和文件夹(删除 文件 和 目录)
git clean -xf://删除当前目录下所有 untracked 文件,不管 .gitignore

//清除缓存
git rm -r --cached .
git add .
git commit -m 'update .gitignore

 

问题

 

warning: LF will be replaced by CRLF in XXXXXXXXXXXXXX.

 

git config --global core.autocrlf true //提交时转换为LF,检出时转换为CRLF(推荐windows
git config --global core.autocrlf input  //提交时转换为LF,检出时不转换(推荐*unix/mac)
git config --global core.autocrlf false //提交检出均不转换
git config --global core.safecrlf true  //拒绝提交包含混合换行符的文件
git config --global core.safecrlf false   //允许提交包含混合换行符的文件
git config --global core.safecrlf warn //提交包含混合换行符的文件时给出警告
git config core.autocrlf false //
git config core.autocrlf true // 当前项目 提交时转换为LF,检出时转换为LF
git config --global core.autocrlf true // 全局 提交时转换为LF,检出时转换为LF

也可以在git根目录下创建 gitattributes文件,内容如下:
gitattributes 文件

* text=auto eol=lf

如上命令会把所有文件格式转化为 LF

 

remote: error: File xxx.rar is 102 MB; this exceeds Git@OSC’s file size limit of 100 MB remote: error: hook declined to update refs/heads/master …… ! [remote rejected] master -> master (hook declined)

 

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch xxx.rar" -- --all

 

Git退回某个版本

 

//查看日志
git log
//退回到某个版本
git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96 
//强制提交
git push -f -u origin master_ptu
//服务器强制拉取
git fetch --all
git reset --hard origin/master
git pull //可以省略
# 合并使用 
// git fetch --all && git reset --hard origin/master && git pull
使用以下命令可以快速检查是否还存在有带有冲突标记的文件。
git diff --check

 

git拉取http仓库代码时每次都需要输入账户和密码

Windows系统会默认存储在凭据中,这样在第一次输错后不能修改,可以在凭据管理器中修改。
Linux中默认不会保存,可以在git仓库目录下执行git config --global credential.helper store,在第一次pull之后会保存信息。

持续更新中……