首页 编程 正文
365

git常用命令

  • yiqingpeng
  • 2018-04-21
  • 0
  •  
git常用指令
git init #将当前工作目录纳入到版本库,此时,在当前目录下会生成一个.git的隐藏文件夹。

git status #查看当前版本库的状态,此命令会列出未提交的文件、未入库的文件等信息。

git add <file1> <file2> ...  #将文件加入到缓存区。在未提交之前,想撤消缓存区的修改:如果文件是第一次add进来的,那么请使用git rm --cached <file>, 否则请使用git reset HEAD <file>.

git commit -m "user message"  #将缓存区的文件进行提交(本质上就是生成版本快照)。使用--amend参数可以直接修改上一次的提交,而不产生新的提交。
#对于新加的文件,都是要经过add, commit两步提交到版本仓库。

git config --list | grep autocrlf  #查看配置项core.autocrlf
#core.autocrlf 可用的值有true, input, false. 默认情况下是true, 会根据系统自动转换平面文件的换行符。

git config --global user.email "your@email.com" #配置开发者邮箱
git config --global user.name "your name" #配置开发者名称

git config --global alias.co checkout #配置checkout指令的简称为co
git config --global alias.ci commit #配置commit指令的简称为ci

git diff <file> #对比文件的差异,比较的是工作区和缓存区的文件差异

git diff --cached <file> #对比文件差异,比较的是缓存区和仓库的差异

git diff HEAD <file> #对比文件差异,比较的是工作区和仓库的差异

git blame <file>    #查看每一行最后一次修改信息

git blame <file> -L a, b #查看文件从a行到b行的最后一次修改信息

git log  #查看提交日志

git log -1 #注意是数字1不是字母L,表示显示最近一次的提交日志

git log --pretty=oneline  #以每条日志一行的格式显示提交日志

git log --graph  #查看分支合并图

git reset --hard HEAD^  #回退到上一个提交,同时清空缓存区和工作区的修改,git的回退是以当前提交版本为起点的,通过log可以看到,HEAD就是指当前提交版本,那么上一个提交就是HEAD^, 上上一个提交就是HEAD^^, 依次类推。若回退的提交太多,可以这样表示HEAD~50表示往前回退50个版本。
回退到某个历史版本之后又反悔想回到回退之前的版本时,可以通过commitid实现,比如:git reset --hard commitId.  commitId就是在git log中显示的那一长串字符串,一般取前7位就可以正常查看了,如git reset --hard e78a891.
还有一个问题就是,使用了git reset 之后,用git log是查看不到回退版本之后的所有版本的commitId, 此时需要用另外一个命令来查看:git reflog , 此指令可以查看到所有的commit日志记录。
--hard 缓存区和工作区跟着一起回退,被回退的修改丢弃掉
--mixed 工作区不回退,缓存区回退,被回退的修改合并到工作区
--soft 缓存区不回退,仅历史区回退,被回退的修改合并到缓存区

git revert 用法见https://blog.csdn.net/q358543781/article/details/54708736

git reset 与 git revert 的区别,一句话总结就是revert只是撤销某一次commit,其他的commit和整个log记录不会受到影响,而reset会干掉某次commit之后的所有的commit,包括log.

保留本地修改不提交的前提下,如何进行代码pull?以下三步:
git stash 将本地修改存储起来
git pull 将远程代码更新
git stash pop 将存储的修改还原 
##git show stash@{0} 可以查看最近一次的stash。

git reset HEAD <file>...  #撤消git add 增加的某些文件修改,其实是将缓存区的修改撤消。相当于git reset --mixed HEAD <file>

git checkout <file>... #撤消工作区的修改。本质是从历史区检出文件到工作区。
比如:1、文件a有修改first modify 已经add到缓存区,接着又在工作区将文件a修改为second modify, 此时应用git checkout a 将会清除工作区的second modify修改,结果就是工作区和缓存区都是first modify.
2、文件a有修改first modify并add到缓存区,此时想用checkout撤销first modify是不行的,需要先使用git reset HEAD <file>将缓存区清空,然后再用git checkout <file>撤销first modify。
3、另一种情况是,不小心通过资源管理器删除了工作区的某个文件,可用checkout将文件恢复过来。

git rm <file>...  #慎用
git commit -m ""  #删除文件,并将删除提交到版本库。

git remote -v #查看本地关联的远程仓库信息

git remote set-url #变更远程仓库URL.
使用场景,比如从bitbucket上clone了一个repo: git clone https://myusername@bitbucket.org/myworkspace/myrepo.git
现在需要将HTTPS链接更换为SSH,运行:git remote set-url origin git@bitbucket.org:myworkspace/myrepo.git
最好是在运行上指令之前,用git remote -v看一下当前的URL是不是HTTPS的。

git remote add [repos_name] <repos_url> #将本地库关联到远程库,repos_name是给关联取个名字可以,如果省略不填,默认为origin.

git remote rm <repos_name> #将本地库与远程库的关联移除

git push <repos_name> <branch> #提交更改到远程仓库,比如 git push origin master

git checkout -b mybranch  #创建并切换到一个本地分支,相当于git branch mybranch; git checkout mybranch.

git checkout -b mybranch  origin/mybranch  #从远程分支创建本地分支,并切换

git checkout mybranch   #切换分支

git merge mybranch #将mybranch分支合并到当前分支(合并前请确保当前分支的所有工作区修改都已提交,否则会丢失)

git merge --no-ff -m "merge infomation" mybranch #合并分支并commit, -m是commit注释

git branch mybranch #创建分支mybranch

git branch -d mybranch #删除已经合并过的分支,一般来说,合并好之后就可以删除掉分支了。

git branch --set-upstream dev origin/dev #将本地分支和远程分支关联起来。

git branch -D mybranch #强制删除未合并过的分支。

git branch   #查看所有分支。

git rebase <baseBranch> [<topicBranch>]  #变基, 将分支的修改整合到另一分支,通常是特性分支整合到master分支,以达到master分支上的日志是线性的;而通常的git merge也能起到整合的作用,但是日志是分叉的。
方法一:git checkout master -> git pull -> git checkout onebranch -> git rebase master -> git checkout master -> git merge onebranch  . 最后 一步merge不能少。
方法二:git checkout master -> git pull -> git rebase master onebranch -> git checkout master -> git merge onebranch.  
如果遇到冲突,先解决冲突,再运行 git rebase --continue, 如果要放弃本次变基,使用git rebase --abort

git rebase -i xxxxxx(commitId)  #合并commit,将xxxxxx以后的commit合并成一个commit(不包含xxxxxx)。合并时,注意pick和squash命令的使用

git diff [-b/*忽略空白字符的差异*/] <olderCommitId>..<latestCommitId>  #将最近的提交与某个历史提交比较差异。例如:git diff a5e63cb3..0cfefb13 > d:/diff.patch   

git checkout <OtherBranchName> <FilePath1> <FilePath2> ...  #从OtherBranchName分支获取指定的某些文件到当前分支。

正在加载评论...