Jade Dungeon

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步):

  1. git rm --cached [path]
  2. 编辑.gitmodules文件,将子模块的相关配置节点删除掉
  3. 编辑.git/config文件,将子模块的相关配置节点删除掉
  4. 手动删除子模块残留的目录

忽略一些文件、文件夹不提交

在仓库根目录下创建名称为.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>