git操作命令

git学习:

常用 Git 命令清单:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

Git远程操作详解:http://www.ruanyifeng.com/blog/2014/06/git_remote.html

Git 工作流程:http://www.ruanyifeng.com/blog/2014/06/git_remote.html

git与svn的区别:

git分布式,本地就可做版本管理

svn必须依托远程仓库做版本控制

gitlab

git使用流程图:


配置信息 

# 修改全局用户信息
git config --global user.name [用户名]
git config --global user.email [邮箱]
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]

查看全局config:cd ~    ->   cat .gitconfig


查看当前仓库config :cd .git     ->  cat config    示例:


注:一般不手动更改config内容

git命令可用 && 连接, 并列执行

主干发布,分支开发

创建仓库:

# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史,[别名]可省略,默认名与远程仓库相同
$ git clone [url] [别名]

 

增加/删除文件

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

分支管理: 

#查看本地当前分支
$ git branch
#查看所有分支
$ git branch -a
#查看远程分支
$ git branch -r
#创建新分支 ,建议分支名规范:[项目名]-[日期]-[创建人]-[修改内容] 
#如:lagou-20171016-yangpeng-bugfix
$ git branch [分支名]
#切换分支
$ git checkout [分支名]
#创建并切换分支
$ git checkout  -b [分支名]
#取远程分支并分化一个新分支
$ git checkout -b test origin/master
# 合并指定分支到当前分支,一般在master上操作(需要有管理员权限) #默认使用当前分支与 [branch] 合并,合并指定分支到当前分支 $ git merge [branch]
# 合并其他分支的某个文件到当前分支
$ git merge --patch [branch] [file.name]
$ git merge -p [branch] [file.name] # 切换到上一个分支 $ git checkout
- # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] #强制删除分支 $ git branch -D [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]

 远程同步: 

# 下载远程仓库的所有变动
$ git fetch [origin]# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 上传本地指定分支到远程仓库 (注:先执行git fetch [origin] ,)
#(注:分支提交前首先先建立联系 git branch --set-upstream [branch] [remote-branch] 
# 务必先与master合并 git checkout master ,git pull ,git checkout  [当前分支], git merge [master] ..)
$ git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all

标签:主要标识某次提交(适用场景如:给项目各个测试阶段加标签,灰度测试、beta测试(b tag),release (R tag)) 

# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

查看信息

# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature
# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
# 显示指定文件相关的每一次diff
$ git log -p [file]
# 显示过去5次提交
$ git log -5 --pretty --oneline
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ 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 checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变化移除,稍后再移入,(适用:将本次未提交的内容悬挂,切换分支工作完后,在切回当前分支)
$ git stash
$ git stash pop

submodule

# 新增submodule
$ git submodule add git@github.com:lib.git <local path>
# 初始化submodule
$ git submodule init
# 更新submodule
$ git submodule update
# 修改submodule后必须通过submodule命令提交后才能
# 同步到主工程中,否则git submodule update拉取的仍是之前的commit head
$ git push --recurse-submodules=on-demand

删除子模块较复杂,步骤如下:

rm -rf 子模块目录 删除子模块目录及源码
vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config 删除配置项中子模块相关条目
rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:

git rm --cached 子模块名称

 

submodules的命令很长,为提升效率,可以创建alias,记录在.git/config路径下。如下:

git config alias.spush 'push --recurse-submodules=on-demand'
git config alias.supdate 'submodule update --remote --merge'

 

查看某次提交(commit)修改内容( git diff):

 




共同开发:

1、项目settings

2、collaboration,输入在github上的用户名,则该用户会收到邀请邮件,接受邀请后

3、权限管理(默认成员具有所有权限),protect branchtian



本地同步remote上的新分支,需要本地新建该分支,然后进入该分支 进行 git pull 

        git init 
        git remote add origin git@git.oschina.net:flqbestboy/js-1024.git
        git add .
        git commit -m "first commit"
        git pull --rebase origin master
        git push -u origin master    

 Git之忽略文件(ignore file):http://blog.csdn.net/benkaoya/article/details/7932370

 

github上发布项目(只纯网页):

新建项目:[项目名].github.io

项目settings

github pages

直接访问[项目名].github.io

可能出现的错误:

错误一:本地master未与远程master关联(虽然添加了远程关联库但未关联master)


解决:

git push --set-upstream origin master

错误二: 

There is no tracking information for the current branch.  
  
Please specify which branch you want to merge with.  
  
See git-pull(1) for details  
  
git pull <remote> <branch>  
  
If you wish to set tracking information for this branch you can do so with  
  
git branch --set-upstream master origin/<branch>

  解决方案: 

git branch --set-upstream master origin/master
fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.

 

解决方案:
git branch --set-upstream-to=origin/master  master

错误三: fatal: Unable to create 'F:/HbuilderProject/projectModel/.git/index.lock': File exists.


解决:执行rm -f .git/index.lock (或者rm -f git/index.lock) 删除后正常

错误四:


解决方案:

1、http://blog.csdn.net/huahua78/article/details/52330792

2、。。20171024 github 被墙,改用码云

错误五:

1、未初始化git, git init

2、没有进入git clone 后的目录

错误六:

➜  weex-project git:(release-1.0.4) ✗ git add .
fatal: Unable to create '/Users/linqiang/Documents/workplace/weex-project/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

解决:

cd .git
rm index.lock

 

 

问题

1.修改远程仓库

方法有三种:
1.修改命令
git remote set-url origin [url]
例如:git remote set-url origin gitlab@gitlab.chumob.com:php/hasoffer.git
2.先删后加
git remote rm origin
git remote add origin [url]
3.直接修改config文件

问题:多人开发时,一人删除了一些无用的tag,push到远程仓库后,另一人pull下来后,使用git tag 1.10.8, git push -tags,后远程仓库又重新出现已经删除的tags

原因:似乎git目前也没有提供一个直接的命令和参数选项可以删除本地的在远程已经不存在的tag

解决方案:远程回退到原版,然后本地

#删除所有本地tag
git tag -l | xargs git tag -d 
#从远程仓库中重新拉取tag
git pull

 

为了避免之后再次出现这种情况,建议每次提交tag时不使用提交所有的tags命令: git push -tags ,而使用仅提交当前标注到tag命令: git push origin V-1.02.003  ,此外应当给当前tag添加附注 git tag -a V-1.02 -m “版本1.02”

 

 

码云上简易的命令行入门教程: 

我们强烈建议所有的git仓库都有一个README, LICENSE, .gitignore文件

Git 全局设置:

git config --global user.name "flqbestboy"
git config --global user.email "962358354@qq.com"
创建 git 仓库:
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin git@gitee.com:flqbestboy/test.git
git push -u origin master

已有项目?

cd existing_git_repo
git remote add origin git@gitee.com:flqbestboy/test.git
git push -u origin master

 

自定义快捷命令 

mac环境下vim ~/.zshrc, 添加自定义即可,例如下

# user defined alias
alias work='cd ~/Documents/workplace && ls'
alias gt='git add . '
alias gl='git pull'
alias gh='git push'
alias gs='git status'
alias dev='npm run dev'
alias build='npm run build'
alias push='git add . && git commit -m "bugfix" && git pull && git push'

 

 

 

 


 

posted @ 2017-10-27 08:46  fanlinqiang  阅读(384)  评论(0编辑  收藏  举报