Git常用操作命令
远程仓库相关命令
检出仓库:
git clone git://github.com/jquery/jquery.git
查看远程仓库:
git remote -v
添加远程仓库:
git remote add [name] [url]
删除远程仓库:
git remote rm [name]
修改远程仓库:
git remote set-url --push [name] [newUrl]
拉取远程仓库:
git pull [remoteName] [localBranchName]
推送远程仓库:
git push [remoteName] [localBranchName]
分支(branch)操作相关命令
查看本地分支:
git branch
查看远程分支:
git branch -r
创建本地分支: ----注意新分支创建后不会自动切换为当前分支
git branch [name]
切换分支:
git checkout [name]
创建新分支并立即切换到新分支:
git checkout -b [name]
删除分支:
-
-d
选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。 -
如果想强制删除一个分支,可以使用
-D
选项
git branch -d [name]
合并分支:将名称为[name]
的分支与当前分支合并
git merge [name]
创建远程分支(本地分支push到远程):
git push origin [name]
删除远程分支:
git push origin :heads/[name]
例子:推送本地分支到远程
我从master分支创建了一个issue5560分支,做了一些修改后,
使用git push origin master
提交,但是显示的结果却是'Everything up-to-date'。
发生问题的原因是:git push origin master
在没有track远程分支的本地分支中默认提交
的master
分支,因为master
分支默认指向了origin master
分支,
这里要使用:
git push origin issue5560:master
就可以把issue5560
推送到远程的master
分支了
例子:本地分支对应远程分支
如果想把本地的某个分支test
提交到远程仓库,并作为远程仓库的master
分支,
或者作为另外一个名叫test
的分支,那么可以这么做:
提交本地test分支作为远程的master
分支。
好像只写这一句,远程的github就会自动创建一个test分支:
git push origin test:master
提交本地test分支作为远程的test分支;
git push origin test:test
例子:删除远程分支
如果想删除远程的分支呢?类似于上面;
-
如果左边的分支为空,那么将删除分号
:
右边的远程的分支。
刚提交到远程的test将被删除,但是本地还会保存的,不用担心:
git push origin :test
版本(tag)操作相关命令
查看版本:
git tag
创建版本:
git tag [name]
删除版本:
git tag -d [name]
查看远程版本:
git tag -r
创建远程版本(本地版本push到远程):
git push origin [name]
删除远程版本:
git push origin :refs/tags/[name]
子模块(submodule)相关操作命令
添加子模块:$
git submodule add [url] [path]
如:$
git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模块,只在首次检出仓库时运行一次就行:
git submodule init
更新子模块:
git submodule update ----每次更新或切换分支后都需要运行一下
删除子模块(分4步):
-
git rm --cached [path]
-
编辑
.gitmodules
文件,将子模块的相关配置节点删除掉 -
编辑
.git/config
文件,将子模块的相关配置节点删除掉 - 手动删除子模块残留的目录
忽略一些文件、文件夹不提交
在仓库根目录下创建名称为.gitignore
的文件,写入不需要的文件夹名或文件,
每个元素占一行即可,如:
target bin *.db
git操作-删除文件
本地端:
rm add2.txt git rm add2.txt git commit -m "rm test" git push web
server端:
cd /var/www/foo.git git update-server-info
检查删除效果
cd rm -rf foo3 git clone http://[某ip]/foo.git foo3
更新已经存在的local code
cd cd foo2 git remote add web [某user]@[某ip]:/var/www/foo.git/ git pull web master
创建
复制一个已创建的仓库:
$ git clone ssh://user@domain.com/repo.git
创建一个新的本地仓库:
$ git init
本地修改
显示工作路径下已修改的文件:
$ git status
显示与上次提交版本文件的不同:
$ git diff
把当前所有修改添加到下次提交中:
$ git add .
把对某个文件的修改添加到下次提交中:
$ git add -p <file>
提交本地的所有修改:
$ git commit -a
提交之前已标记的变化:
$ git commit
附加消息提交:
$ git commit -m 'message here'
修改上次提交
Don't amend published commits! $ git commit --amend
提交历史
从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间):
$ git log
显示所有提交(仅显示提交的hash和message):
$ git log --oneline 显示某个用户的所有提交: {{{class="brush:bash" $ git log --author="username"
显示某个文件的所有修改:
$ git log -p <file>
谁,在什么时间,修改了文件的什么内容:
$ git blame <file>
分支与标签
列出所有的分支:
$ git branch
切换分支:
$ git checkout <branch>
基于当前分支创建新分支:
$ git branch <new-branch>
基于远程分支创建新的可追溯的分支:
$ git branch --track <new-branch> <remote-branch>
删除本地分支:
$ git branch -d <branch>
给当前版本打标签:
$ git tag <tag-name>
更新与发布
列出对当前远程端的操作:
$ git remote -v
显示远程端的信息:
$ git remote show <remote>
添加新的远程端:
$ git remote add <remote> <url>
下载远程端版本,但不合并到HEAD中:
$ git fetch <remote>
下载远程端版本,并自动与HEAD版本合并:
$ git remote pull <remote> <url>
将远程端版本合并到本地版本中:
$ git pull origin master
将本地版本发布到远程端:
$ git push remote <remote> <branch>
删除远程端分支:
## (since Git v1.5.0) $ git push <remote> :<branch> ##(since Git v1.7.0) git push <remote> --delete <branch>
发布标签:
$ git push --tags
合并与重置
将分支合并到当前HEAD中:
$ git merge <branch>
将当前HEAD版本重置到分支中:
Don't rebase published commit! $ git rebase <branch>
退出重置:
$ git rebase --abort
解决冲突后继续重置:
$ git rebase --continue
使用配置好的merge tool 解决冲突:
$ git mergetool
在编辑器中手动解决冲突后,标记文件为已解决冲突
$ git add <resolved-file> $ git rm <resolved-file>
撤销
放弃工作目录下的所有修改:
$ git reset --hard HEAD
移除缓存区的所有文件(i.e. 撤销上次git add):
$ git reset HEAD
放弃某个文件的所有本地修改:
$ git checkout HEAD <file>
重置一个提交(通过创建一个截然不同的新提交)
$ git revert <commit>
将HEAD重置到上一次提交的版本,并放弃之后的所有修改:
$ git reset --hard <commit>
将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:
$ git reset <commit>
将HEAD重置到上一次提交的版本,并保留未提交的本地修改:
$ git reset --keep <commit>