git command

最近项目中用到了 git branchgit submodule,查阅了一些文章,总算有点头绪了,连同一些常用的 git 命令记录在此,以便查阅。

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]

初始化仓库:git init

配置信息:

1
2
git config --global user.name "jinlongz"
git config --global user.email jinlongz@gmail.com

查看本地修改与服务器的差异:git status

将这些差异文件添加,这样就可以提交了 git add .

提交更改到服务器:git commit –m “这里是注释”

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

1
2
$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支

  • 使用 git rebase 避免无谓的 merge

git rebase 代替 git merge

1
git pull --rebase [remote name] [branch name]


1
2
git checkout mywork
git rebase origin

在rebase的过程中,也许会出现冲突。在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引, 然后,你无需执行 git commit,只要执行:

1
git rebase --continue

这样 git 会继续rebase。
在任何时候,你可以用--abort参数来终止rebase的行动,并且”mywork”分支会回到rebase开始前的状态。

1
git rebase --abort

git submodule 子模块

Git submodule 可以轻易地将别人的 git 项目挂入你目前 git 项目的任何位置

  • git submodule add

使用 git submodule add [仓库位置] [欲放置的位置] 增加一个新的子模块:

1
$ git submodule add git@github.com:josephj/javascript-platform-yui.git static/platform

需要注意 [欲放置的位置] 不能以 / 结尾(会造成修改不生效),也不能已经是现有的路径(不能顺利 Clone)。

  • git submodule status

查看分支状态

  • git submodule init

submodule 初始化

  • git submodule update

更新子模块的内容

git branch 分支操作

  • 新建本地分支

    1
    2
    3
    git branch testing #创建testing分支
    git checkout testing #切换至testing分支
    git checkout -b iss53 #创建并切换至iss53分支。
  • 创建跟踪分支

方法一:

1
2
git checkout -b [本地分支名] [远程名]/[分支名]
git checkout -b serverfix origin/serverfix

方法二:(适用1.6.2以上版本Git)

1
2
git checkout --track [远程名]/[分支名]
git checkout --track origin/serverfix
  • 查看分支
1
2
3
git branch #列出所有分支,星号"*"表示当前所在分支。
git branch -a #列出本地和远程分支,红色为远程分支
git branch -v #查看各分支最后一次提交信息
  • 远程分支跟本地分支的关系
1
git remote show origin
  • 更新远程跟踪分支到本地分支
1
git fetch origin
  • 删除分支:
    1
    $ git branch -d [name]

-d 选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用 -D 选项

  • 推送本地分支

方法一:

语法:git push (远程仓库名) (本地分支名)

1
git push origin serverfix

方法二:(可自定义远程分支名)

语法:git push (远程仓库名) (本地分支名):(远程分支名)

1
git push origin serverfix:serferfix

  • 合并本地分支
1
2
3
git checkout master #首先切换到主分支
git merge hotfix #测试完毕后,合并hotfix分支
git branch -d hotfix #删除已合并的hotfix分支
  • 解决合并冲突
1
2
3
git status #合并失败的文件以"unmerged"标出
git add . #标记冲突已解决,并暂存文件
git mergetool #Git默认图形化冲突解决工具
  • 合并远程分支
1
git merge origin/serverfix #origin/master格式:远程仓库/分支名,合并远程分支serverfix到当前分支
  • 查看已和当前分支合并的分支

可用git branch -d [name] 删掉未标星号的分支,因为已经合并了。

1
git branch --merged

  • 查看未和当前分支合并的分支

强制删除未合并的分支git branch -D [name]

1
git branch --no-merged

  • 删除远程分支
1
2
git push [远程仓库名] :[远程分支] #注意区别:git push [远程名] [本地分支]:[远程分支]
git push origin :serverfix #删除远程分支
  • 衍合所在分支
1
2
git checkout experiment #切换到需要衍合的分支
git rebase master #衍合experiment分支到主分支

Git Submodule 的認識與正確使用!
Git Community Book 中文版