日常工作中对版本控制工具的熟练使用,是很有必要的。下面是我工作中一些经常使用用的git命令:
1.查看git帮助
git config --global alias.ci commit
$ git help <verb>
$ git <verb> --help $ man git-<verb>2.git log -p -2
我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:
3.git log --stat
git log 还提供了许多摘要选项可以用,比如 --stat,仅显示简要的增改行数统计:
4.git log -U1 --word-diff
git 提供了 --word-diff 选项。我们可以将其添加到 git log -p 命令的后面,从而获取单词层面上的对比
5.git fetch 和 git pull 区别
git pull:相当于是从远程获取最新版本并merge到本地
git fetch:首先从远程的origin的master主分支下载最新的版本到origin/master分支上
git pull = git fetch + git merge
6.本地提交代码到远程
git push origin 当前分支:远程分支
如:git push origin deve:wt
7.查看服务器分支:git branch -av8.git简化命令配置
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st "status -s" $ git config --global alias.l "log --oneline -decorate -12 --color" $ git config --global alias.ll "log --oneline —decorate --color"然后就可以用git co ,git br, git st等这些配置过的简化命令了
9.查看某次历史修改 git show commitId 10.查看远程分支git remote show origin
11.删除服务端和本地没有引用的分支,也就是同步服务端和本地的分支
git fetch -p or git remote show origin
12.git push -u和git branch --set-upstream-to指令之间的区别
举个例子:我要把本地分支master与远程仓库origin里的分支gaga建立关联。 (如果使用下列途径1的话,首先,你要切换到master分支上(git checkout master)) 两个途径:1. git push -u origin gaga 2. git branch --set-upstream-to=origin/gaga master 这两种方式都可以达到目的。但是1方法更通用,因为你的远程库有可能并没有gaga分支,这种情况下你用2方法就不可行,连目标分支都不存在,怎么进行关联呢?所以可以总结一下:git push -u origin gaga 相当于 git push origin gaga + git branch --set-upstream-to=origin/gaga master
13.git merge dev
把dev分支merge到当前分支
14.git reabse
这个用法一两句说不清楚,需要举例子比较号说明,可以看看这个http://www.cnblogs.com/hydah/archive/2012/04/10/2440220.html
15.git revert
我们难免会因为种种原因执行一些错误的commit / push,git提供了revert命令帮助程序员修复这样的错误。
git revert 命令会通过一个新的commit 来使仓库倒退一个commit.
git revert HEAD revert 当前分支最新的commit
$ git revert HEAD~1fatal: Commit 137ea95 is a merge but no -m option was given.
对于revert merge的情况,程序员需要指出revert 这个merge commit中的哪一个。通过-m或者--mainline参数,以及配合一个整数参数,git就知道到底要revert哪一个merge。我们先来看一下要revert的这个merge commit:
$ git log HEAD~1 -1commit 137ea95c911633d3e908f6906e3adf6372cfb0adMerge: 5f576a9... 62db4af...
如果使用git revert HEAD~1 -m 1命令,也就是5f576a9,使用-m 2会revert第二个commit,也就是62db4af。
自动生成的comment也会标示revert的是merge里的哪一个commit。
直接revert一次merge提交:
git revert f67024f9df95bb8fb01228ce596e7c33ccef1753 -m 1
16.git reset和 git revert目的都是要代码回退,但是区别:
git reset 是后退commit来保证代码回退
git revert是前进用一个新的commit来保证代码回退
17.git cherry-pick
在本地master提交了一个commit(c41e06a993628ad6175dbe70f17f55f772aaaba1),如何提交的develop分之上?
用法:
git cherry-pick
git checkout develop
git cherry-pick c41e06a993628ad6175dbe70f17f55f772aaaba1如果顺利,那么已经提交develop版本。
如果提示冲突:
$ git statusOn branch developYour branch is up-to-date with 'origin/develop'.You are currently cherry-picking commit 0e82d79. (fix conflicts and run "git cherry-pick --continue") (use "git cherry-pick --abort" to cancel the cherry-pick operation)Unmerged paths: (use "git add..." to mark resolution) both modified: test_1.txt
解决冲突,然后提交,就可以了。
18.把本地代码push其他仓库
git push -f git@git.n.xiaomi.com:test-1/access-common.git newmast:master
即把当前代码库的newmast分支上的代码push到git@git.n.xiaomi.com:test-1/access-common.git远程的 master分支上
19.查看指定文件某行代码的最新修改记录
git blame filename
a798306c (jgang 2015-08-13 15:41:24 +0800 84)086574e6 (qtao 2015-10-20 20:30:47 +0800 85) 086574e6 (qtao 2015-10-20 20:30:47 +0800 86) SECONDS 086574e6 (qtao 2015-10-20 20:30:47 +0800 87)
20.
git log --graph --decorate --oneline --simplify-by-decoration --all
说明:
--decorate 标记会让git log显示每个commit的引用(如:分支、tag等)
--oneline 一行显示
--simplify-by-decoration 只显示被branch或tag引用的commit
--all 表示显示所有的branch,这里也可以选择,比如我指向显示分支ABC的关系,则将--all替换为branchA branchB branchC
21.添加remote 把当前代码推送到新的remote,新的代码分支为remoteTest.
git remote add github git@github.com:wangtao1/raven-java.git
git push github mast:remoteTest
22.删除remote
git remote remove github