hg和git命令对照表

hg和git命令对照表

来源 https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone

Git hg rosetta stone

muxator edited this page on 10 Mar 2017 · 50 revisions

The sympy git server is at https://github.com/sympy/sympy . The main Sympy repository may be cloned with git clone git://github.com/sympy/sympy.git.

The first and the most important thing is that you should understand that git is different. For example it uses staging area (so called index) for iteratively preparing commits. This and other great and unique features of git make it the preference of many developers, so go read its documentation!

Here is a nice cheatsheet which will probably make your life easier in the beginning: https://jan-krueger.net/development/git-cheat-sheet-extended-edition

Being said all this, now comes a simplified mapping between hg commands and git commands. Use it with care -- there are some semantic differences ...



If you know how to use hg very well and just looking at how to do the same things in git, this page is right for you. Use it like a dictionary hg -> git. Some equivalent git commands may seem more complex than the corresponding hg counterparts; that‘s because the natural flow of work in git doesn‘t map 1:1 to Mercurial. But the point here is that if you are used to some specific workflow in hg, it can be directly translated to git using the table below and it does exactly the same thing as you are expecting it to.

When editing this wiki page, please only add an exact equivalent to some hg command; a full explanation can always be found somewhere else on the net.

Table of Contents

Rosetta Stone

hg git
hg cat -r rev some_file git show rev:some_file
hg clone http://hg.sympy.org/sympy-git.hg git clone git://git.sympy.org/sympy.git
hg clone -U http://hg.sympy.org/sympy-git.hg git clone --bare git://git.sympy.org/sympy.git
hg diff git diff HEAD
hg diff -r A -r B git diff A^..B
hg status git status
hg status -c git ls-files -t | grep ‘^H‘
hg manifest git ls-tree -r --name-only --full-tree HEAD
hg parents git show --pretty=format:‘%P‘ -s
hg commit git commit -a
hg record git add -p; git commit # or, for a more detailed interface: git add -i; git commit
hg email -r tip git send-email HEAD^ # or: git format-patch HEAD^ ; git send-email 0001-Add-whitespace.patch
hg view gitk, git gui
hg help command git help command
~/.hgrc ~/.gitconfig
.hg/hgrc .git/config
hg paths git remote -v
editing paths in .hg/hgrc git remote add name url # see "git help remote" for more info how to edit paths; alternatively, you can edit them by hand in .git/config too
.hgignore .gitignore
.hg/hgrc [ui] ignore .git/info/exclude
hg add git add (note, it adds _content_ to index; can work on a hunk-by-hunk basis with -p!)
hg rm git rm
hg push git push
hg pull git fetch
hg pull -u git pull
hg addremove git add -A (or: git add .; git ls-files --deleted xargs git rm)
hg revert -a git reset --hard
hg revert some_file git checkout some_file
hg purge git clean -fd
hg purge --all git clean -fdx
hg strip 2fccd4c git reset --hard 2fccd4c^ (on a normal repository)
git reset --soft 2fccd4c^ (on a bare repository)
hg forget git rm --cached (reference: stackoverflow)
hg export git format-patch
hg import --no-commit some.patch git apply some.patch
hg import some.patch git am some.patch
hg out git fetch && git log origin/master..
hg in git fetch && git log ..origin/master
hg update tip git checkout HEAD # or this: "git checkout master", or "git merge FETCH_HEAD", depending on what you did before this
hg update -C git checkout -f
hg update some.branch git checkout some.branch # Note that "git branch some.branch" is not the same as this.
hg up --date 2014-01-01 git checkout `git rev-list -n 1 --before="2014-01-01" master`
hg qimport stg something (A separate patch manager extension is probably not necessary in git -- normal workflow combined with git rebase -i should cover your needs)
hg qpush (see hg qimport)
hg qpop (see hg qimport)
hg qimport -r tip ?
hg qnew -f some.patch ?
hg resolve -a -m git add -u
hg root git rev-parse --show-toplevel
hg log -G (old way: hg glog) git log --graph --all --decorate # or: git log --graph --all;
hg verify git fsck
hg branches git branch -a
hg branch git rev-parse --abbrev-ref HEAD
hg rollback git reset HEAD~
hg backout git revert

Setup

~/.hgrc:

 [ui]
 username = Ondrej Certik <[email protected]>

~/.gitconfig:

 [user]
     name = Ondrej Certik
     email = [email protected]

 [color]
     ui = auto

 [color]
     decorate = short

 [alias]
     ci = commit
     di = diff --color-words
     st = status

     # aliases that match the hg in / out commands
     out      = !git fetch && git log FETCH_HEAD..
     outgoing = !git fetch && git log FETCH_HEAD..
     in       = !git fetch && git log ..FETCH_HEAD
     incoming = !git fetch && git log ..FETCH_HEAD

More Information

One can find some info here:

and at many other pages.

Tips

 - use gitk to visualize history (much more capable than "hg vi")
 - use git gui to visually stage/unstage what you are preparing for commit
   to index (it too can work on hunk-by-hunk basis)
 - git stash is your friend
 - git rebase --interactive is your friend too :)
 - windows users: either use cygwin or msysgit:
   https://code.google.com/p/msysgit/
 - don‘t try to project your usual habits - open your mind, and maybe you‘ll
   discover much more superior workflow. (yes, this needs hard work and RTFM,
   and being ready that FM sometimes differ from what software actually does)
 - Add this
 parse_git_branch() {
   git branch 2> /dev/null | sed -e ‘/^[^*]/d‘ -e ‘s/* \(.*\)/(\1)/‘
   # __git_ps1 "(%s)"
   # use the second line instead if you have bash autocompletion for git enabled
 }
 PS1="\w\$(parse_git_branch) $ "
   to your promptstring to show current branch when in a git-tracked directory.
   (see http://b.lesseverything.com/2008/3/25/got-git-howto-git-and-github)

git -> hg conversion

You can use this script:

#! /bin/bash

work=`mktemp -t -d sym.XXX`
git format-patch -k -p -o $work master..HEAD
# add a new line after the subject line so that Mercurial imports it fine.
sed -i ‘4a\\‘ $work/*
cd ~/repos/sympy.hg/
hg import $work/*
rm -r $work

to convert all patches between master..HEAD to mercurial repository sitting at ~/repos/sympy.hg/.

Alternatively, you could use the hg-git Mercurial plugin.

how to checkout remote branch

Start with some repository, for example create a new one from scratch:

$ mkdir sympy
$ cd sympy
$ git init

or clone our official repository:

$ git clone git://git.sympy.org/sympy.git
$ cd sympy

Now let‘s say you want to checkout some branch from git://github.com/certik/sympy.git. The canonical way is to add it to your remotes:

$ git remote add ondrej git://github.com/certik/sympy.git

Then fetch all branches from there into your remote branches:

$ git fetch ondrej

You can now list them with "git branch -r", or examine them with "git log ondrej/some_branch". Finally, to checkout the mpmath5 branch, do:

$ git checkout -b mpmath5 ondrej/mpmath5

================= End

原文地址:https://www.cnblogs.com/lsgxeva/p/10193435.html

时间: 2024-11-07 23:25:39

hg和git命令对照表的相关文章

常用Git命令汇总

常用Git命令汇总 跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代码用Git作版本控制.平时自己虽然天天使用Git,但是总感觉知识有些零散,于是汇总了一些常用的Git命令. 常用配置 --system #系统级别 --global #用户全局 --local #单独一个项目 git config --global user.name "xxxx" #用户

hg vs git :这个世界除了svn还有别的

最近想用版本控制软件来保存汉化文件,但又觉得SVN太麻烦,于是想到了最近较为流行的分布式版本控制工具.而Git和Mercurial(意思为水银的,于是经常缩写为Hg)自然是其中最为流行的工具.大名鼎鼎的Linux就用Git作源码管理,而Python和Firefox则采用Hg(你可以在这找到一堆使用Hg的项目).比较了一番后,最终我选择了后者.因为Git的优势主要在于分支,而汉化并不需要太多分支:而Git对Windows的支持似乎不如Mercurial,ssh也比http麻烦,比较难教汉化组成员们

windows下git命令的使用

一.写在前面 关于git,出于自己的爱好,前段时间玩了一下,也自己上网查了一下资料,现简单记录一下,以备查看. 当然,本文并不是介绍配置git服务器的文章,而是以github服务器作为git的远程仓库服务器. 二.安装 windows下使用git,需要安装msysGit,下载地址是https://code.google.com/p/msysgit/downloads/list; 安装完成后,在安装目录下,有个msys.bat文件,这个就是msysGit提供的命令行客户端: 当然就像svn一样,也

常用 Git 命令清单

我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-nam

Git命令执行漏洞

Git命令造成的反弹shell 漏洞描述: Git LFS可以.lfsconfig使用LFS由存储库中的文件配置(部分),并且可以将Git LFS指向ssh://. [lfs] url = ssh://-oProxyCommand= some-command 当使用这样的.lfsconfig文件克隆存储库时,使用LFS插件的Git将尝试调用ssh以从主机获取LFS对象 -oProxyCommand=some-command.然而,SSH会将该主机名解释为一个-o选项,并随后尝试调用some-co

git命令行使用

1. git命令行配置 1)安装完git客户端之后,在任意目录右键鼠标,选择Git GUI Here 2)在打开的窗口中依次选择Help->> Show SSH Key 2)如果弹出的窗口中中间部分没有key,可以点击 Generate Key 按钮,生成key,然后将生成的key拷贝一下,添加到gitlab中即可. 2. 命令使用 1)下载代码 在存放代码的目录中,右键鼠标,选择 Git Bash Here,然后会打开终端窗口 输入: git init   创建git配置目录 输入下面命令,

常用 Git 命令清单 转

我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-nam

常用 Git 命令清单【转】

转自:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:

git命令评测

近日得知git命令在库进行操作,查找git尽管小命令(当然,也不能太小),但他们是一个非常强大的组合,更重要的是,它是非常的效果不同状态的命令是不一样的打.该博文总结git命令.. Git命令 命令小结 命令 功能 git init 把当前目录初始化为默认的git库 git add 文件名称 向git库中加入一个文件 git rm 文件名称 从git库中删除一个文件 git status 查看当前库中进行的任务 git diff 文件名称 add前查看工作区和暂存区的区别 git commit