diff --git a/git-frequently-used-command.md b/git-frequently-used-command.md new file mode 100644 index 0000000..2c90aa0 --- /dev/null +++ b/git-frequently-used-command.md @@ -0,0 +1,113 @@ +# git的使用 # + +Git是一个由林纳斯·托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。需要注意的是和GNU Interactive Tools,一个类似Norton Commander界面的文件管理器相区分。 + +:zap: 注意: 在使用 git 的过程中,如果我们需要查看帮助信息,可以 man git 或者 git –help,如果查具体的命令的 help 信息,可以用类似于 git init –help 的语句来查看。 +``` +git init +``` +当当前目录不是一个 git 库时,执行这个命令会把当前目录初始化一个 git 库。具体为在当前目录下新建一个 .git 的目录。 只有初始化了目录,才能进行后续操作。 +如果我们从别的地方拷贝一个 .git 的目录到当前目录下,那就可以不执行 git init 的操作。 +``` +git add +``` +这个操作通常是在 git init 操作或者修改了一个已有的 git 库以后执行。一般是直接 +``` +git add . +``` +把当前所有文件加入到 git 库中。也可以用命令 +``` + git add filename1 filename2 +``` +来添加单个文件。 +``` +git commit +``` +这个命令是用于提交git修改的,命令格式为: git commit ,一般加上的选项有 -a。 执行这个命令之前最好先执行 git add .,把所有文件都添加进git库,以免有时新加文件后提交不上。 + +有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用–amend 选项重新提交: +``` +$ git commit –amend -m”修改 提交 说明” +``` +``` +git branch +``` +这个命令用于查看git分支。 常用操作有: +``` +git branch -a 可以列出所有分支 +git branch -D Branch-name 可以删除以 Branch-name 为名的分支 +git branch Branch-name 可以添加一个以 Branch-name 为名的分支 +git branch -m Branch-name1 Branch-name2 把 Branch-name1 分支修改为 Branch-name2 +``` +``` +git checkout +``` +这个命令可以取出某个 commit 或者某个 branch。 +``` +git checkout commit-name +git checkout branch-name +git checkout -- filename 这个操作会用上一次提交的 filename 文件覆盖现在的 filename 文件 +``` +``` +git diff +``` +此命令用于查看代码的修改。常用语法有: +``` +git diff --color 可以显示颜色,且显示出当前版本(未提交)和之前版本的代码差异 +git diff commit1 commit2 filename 可以查看文件 filename 在 commit1 和 commit2两个分支的区别 +git diff HEAD^ HEAD filename 可以查看文件filename 在当前已提交版本和上一个已提交版本的区别 +``` +``` +git log +``` +显示git提交记录。 可以把后面添加上 branch 的名称,这样会列出该 branch 的提交记录。 +``` +git tag +``` +养成打tag好习惯,给当前commit打一个tag,名称为 20101023_publish ,命令为: +``` +$: git tag 20101023_publish +``` +加上-f覆盖原有的tag +``` +$: git tag -f 20101023_publish +``` +显示所有的tag +``` +$: git tag 20101015_publish 20101019_publish 20101021_publish +``` +删除tag +``` +$: git tag -d 20101023_publish +``` +tag要push上服务器,操作跟分支操作没有任何区别 +``` +$: git push origin 20101023_publish # push 到服务器 +$: git push origin :20101023_publish # 从服务器上删除 +``` +:zap: 值得注意的是,如果tag名字和分支名字一样的时候,push需要指定refs的详细路径,因为分支和tag在git内部是这样表示的(只是引用),tag只存储所指向的那一次提交: +``` +refs/tags/{tagnane} refs/heads/branches/{branchnane} +``` +所以要这样push相同名字的tag和分支 +``` +$: git push origin refs/tags/product $: git push origin refs/heads/branches/product +``` +把所有的tag都push到服务器上 +``` +$: git push origin --tags +``` +``` +git clone +``` +克隆 git 库到当前目录。语法: git clone git-url (比如: git clone git@rd-server:sources/adduser.git ) 新创建 git 库也用这个命令,不过需要添加一个参数 git clone –bare git-url ,这样会只克隆 .git 目录。 +``` +git merge +``` +这个命令需要在被合并的分支上操作。 假设需要把 branch1 merge 到 master 分支,执行: +``` +git checkout master +git merge branch1 +``` +这样就会把 branch1 merge 到 master 分支上。 +