不解释区:
git clone http://xxxx.git 克隆远程仓库
git init 初始化本地仓库
git status 查看仓库状态
git add . 把工作区的所有修改添加到暂存区
git add /src/xxx 把某个目录或文件添加到暂存区
git remote
git remote
查看有哪些路由
-v 查看路由带详细路径
git remote add origin http://xxxx.git
添加路由
git remote rm origin 或 git remote remove origin
删除路由
git remote rename origin origin_new
路由重命名
git remote set-url origin_nwe http://zzzz.git
修改路由地址
git pull
拉取远程代码
一般情况下git pull 不会有问题,最多就是合并commit,有一种情况,git pull 会报错:fatal: refusing to merge unrelated histories,简单的说就是本地仓库和远程仓库是两个独立不相关的仓库,而他们都有自己的分支历史
问题描述,在远程创建仓库的时候一般会有一个选项叫:是否创建readme.md文件,如果你勾选了,那么远程仓库是一个不纯净的仓库,因为他有自己的过去,这个时候, 本地仓库也不是用git clone 而是用git init,然后本地还有了commit,这个时候git pull 会报错,解决办法:git pull origin master --allow-unrelated-histories
git push
推送本地修改到远程,第一次push时:git push -u origin master
git branch
git branch
查看分支列表:-a -v -vv
git branch <branchName>
创建分支
git checkout -b <branchName>
创建+切换 分支
git checkout -b <branchName> origin/<branchName>
拉取远程分支到本地
git branch --set-upstream-to=origin/master master
关联远程分支, git branch --unset-upstream <branchName> 取消关联
git push origin <branchName>:<branchName>
推送本地分支(冒号前) 到远程(冒号后,没有会创建)
git branch -d <branchName>
删除本地分支,git branch -D <branchName> 强行删除,不管分支内有没有修改未提交的
git push origin --delete <branchName>
删除远程分支,并不会删除本地分支,本地分支如果也要删除 需要再删除本地分支
合并
git merge <branchName>
合并分支
git cherry-pick commitId
合并其它分支的某次commit到当前分支(注意只合一个commit会不会出现代码报错)
git reset --head
版本回退,版本回退会撤销删除工作区和暂存区的修改,未跟踪的文件不受影响,所以在回退之前,如果工作区或暂存区的修改还有用,可以先stash 起来
在git中,HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^ 上上一个,那个..我想回退100个版本... HEAD~100
git reset --head commitId 回退到commitId那次提交
看以前的版本可以用git log看,但是如果从未来穿越到现在,再用git log是看不到未来的commit记录,那么又想回到未来可是找不到路?git reflog了解下
远程回退:
本地回退后,提交回退到远程:git push origin HEAD --force
撤销修改(git checkout -- & git rest HEAD)
git checkout -- readme.txt
命令git checkout -- readme.txt 意思就是,把readme.txt文件在工作区的修改撤销掉,这里有两种个情况:
a. readme.txt自修改后还没有被放到暂存区(git add),现在,撤销修改就回到和版本库一模一样的状态
b. readme.txt 已经添加到暂存区,又做了修改,现在,撤销修改就回到添加到暂存区后的状态(并不能撤销暂存区的修改,只是撤销添加到暂存区后 又修改的内容)
总之:git checkout -- 就是让这个文件回到最近一次 git add 或者 git commit 的地方
git reset HEAD <filename>
git checkout -- 不能撤销已添加到暂存区的修改,但是git reset HEAD 可以
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区
git reset HEAD readme.txt 执行后,使用git status 查看状态,会发现暂存没有待提交,而工作区有修改的
覆盖本地修改
有些时候需要放弃本地修改,使用远程覆盖本地修改时
git fetch --all //把代码下载到本地,还未合并
git reset --hard origin/master //把本地仓库的HEAD指向到远程下载的HEAD,完成覆盖
git stash
将上次commit之后的所有修改‘储藏’起来
git stash 详解:http://www.softwhy.com/article-8628-1.html 参考,感谢
git stash 默认采用 git stash push,具体查看上面详解链接区别git stash save(已不推荐使用)
最常用 git stash -m‘注释‘
参数:
-k (--keep-index)添加到暂存区的不储藏
-p (--patch 我认为path理解更好) 指定某个文件
-u (--include-untracked) 把未跟踪的也储藏起来,新建的文件,未执行过git add 就是未跟踪过的
-a (--all) 把所有的修改储藏起来,包括被忽略的
-m (--message) 描述说明储藏的东西,注释
git stash list
查看储藏列表
git stash pop [index]
默认压出第一个 git stash pop 0,stash是一个‘栈’结构,后进先出,最后一个stash进去的下标为0
git stash drop [index]
删除某次储藏
git stash clear
删除所有储藏
git log
git log 默认输出最近几次提交,可以指定参数 git log -3 查看最近三次提交
如果觉得输出的内容太多,可以:git log --pretty=online 一行展示
如果觉一行展示,commit id太长的话:git log --pretty=oneline --abbrev-commit
git show <commitId>
查看某次提交改变内容
git show <commitId> <filename>
查看某次提交中某个文件的变化内容
git log <filename>
查看filename的相关提交记录
git log -p <filename>
查看filename每次提交的变化内容
git reflog
从未来穿越到现在版本后,查找未来相关
原文:https://www.cnblogs.com/aspt/p/11906493.html