Git
在上家公司时使用git管理代码,当时使用的稀里糊涂,有些地方不是太明白。现在这家公司把代码移到git上管理了,有必要很明白的弄清楚一些命令的含义。现在把资料整理出来,供以后忘记时使用。有需要的人也可以看看。欢迎大家提意见。
1、新建代码库
在当前目录新建一个Git代码库
- git init
新建一个目录,将其初始化为Git代码库
- git init [project-name]
下载一个项目和它整个代码历史
- git clone [url]
clone下来的repo以url最后一个斜线后面的名称命名文件夹,也可以指定名字
- git clone [url] [repo-name]
2、配置Git
显示当前的Git配置
- git config --list
设置提交代码时的用户信息
- git config [--global] user.name "[name]"
- git config [--global] user.email "[email address]"
3、分支
本地分支
查看本地分支列表
- git branch
删除本地分支
删除本地merge了的分支
- git branch -d [branch-name]
删除分支(不管有没有merge)
- git branch -D [branch-name]
重命名本地分支
- git branch -m [old-name] [new-name]
远程分支
查看远程分支
- git branch -r
查看所有分支
- git branch -va
删除远程分支
- git push --delete origin [branch-name]
或者
- git push origin :[branch-name]
或者
- git branch -dr [remote-branch]
新建一个分支,但依然停留在当前分支
- git branch [branch-name]
切换到指定分支,并更新工作区
- git checkout [branch-name]
新建一个分支,并切换到该分支
- git checkout -b [branch-name]
新建一个分支,与指定的远程分支建立追踪关系
- git branch -- track [local-branch] [remote-branch]
建立追踪关系,在现有分支与制定远程分支之间
- git branch --set-upstream [local-branch] [remote-branch]
4、远程同步
下载远程仓库的所有变动
- git fetch [remote-repo]
显示所有远程仓库
- git remote -v
显示某个远程仓库的信息
- git remote show [remote-repo]
增加一个新的远程仓库,并命名
- git remote add [shortname] [url]
取回远程主机某个分支的更新,再与本地指定的分支合并,如果远程分支与当前分支合并,则冒号后面的部分可以省略
- git pull [remote-repo] [remote-branch-name]:[local-branch-name]
上传本地指定分支的更新到远程仓库
- git push [remote-repo] [local-branch]:[remote-branch]
强行推送当前分支到远程仓库,即使有冲突
- git push [remote-repo] --force
推送所有分支到远程仓库
- git push [remote-repo] --all
每个git branch可以有个对应的upstream。假设你有两个upstream,分别叫server1和server2,本地master branch的upstream是server1上的master,那么当你不带参数直接输入git pull或者git push时,默认是对server1进行pull/push。如果你成功运行"git push -u server2 master",那么除了本地branch会被push到server2之外,还会把server2设置成upstream。
- git push -u [remote-repo] [branch]
5、本地提交
提交暂存区到仓库区
- git commit -m "message"
提交暂存区的指定文件到�仓库区
- git commit [file1] [file2] ... -m "message"
提交工作区自上次commit之后的变化,直接到仓库区
- git commit -a
提交时显示所有diff信息
- git commit -v
使用一次新的commit,代替上一次提交;如果代码没有任何新的变化,则用来改写上一次的提交信息,只产生一次提交
- git commit --amend -m "message"
重做上一次commit,并包括指定文件的新变化
- git commit --amend [file1] [file2] ...
讲其他分支的指定commit应用在当前分支上
- git cherry-pick [commit id]
6、查看信息
显示有变更的文件
- git status
显示当前分支的版本历史
- git log
显示指定文件的每一次diff
- git log -p [file]
显示暂存区和工作区的差异
- git diff
显示暂存区和上一个commit之间的差异
- git diff --cached [file]
显示工作区与当前分支最新commit之间的差异
- git diff HEAD
显示两次提交之间的差异
- git diff [first-branch]...[second-branch]
显示某次提交的元数据和内容变化
- git show [commit-id]
显示某次提交时,某个文件的内容
- git show [commit]:[filename]
撤销
恢复暂存区中指定文件的内容到工作区中
- git checkout [file]
恢复某个commit的指定文件内容到暂存区和工作区
- git checkout [commit] [file]
撤销没有add的文件的修改(危险,本地改动会被撤销)
$ git checkout -- [file]
恢复暂存区的所有文件内容到工作区
- git checkout .
重置暂存区的指定文件(撤销add过的指定文件到工作区)
- git reset [file]
重置暂存区与工作区,与上一次commit保持一致(丢掉add的文件)
- --soft - 缓存区和工作目录都不会被改变,回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
- --mixed - 默认选项。缓存区和你指定的提交同步,但工作目录不受影响,此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
- --hard - 缓存区和工作目录都同步到你指定的任务,彻底回退到某个版本,本地的源码也会变为上一个版本的内容
例如 git reset --hard
重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
如果要将撤销推送到远程仓库,再执行git push [] [] --force
- git reset [commit]
新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
- git revert [commit]
暂时将未提交的变化添加到stash
- git stash
恢复stash中第一条的改动到工作区,并将其在stash list中移除
- git stash pop
恢复stash中指定id的改动到工作区(并不在stash中删除)
- git stash apply [stash@{id}]
删除stash
- git stash drop [stash@{id}]
网友评论