以前用过一段时间的svn,今年这个项目用的是git,这篇文件记录一些自己用过的命令和遇到的情况,仅作参考。
目前关于git,用到最多的就是下面这几条命令:
git pull
git commit, git commit -asm “ log ”
git push
嗯,还有个几个:
git log
git diff
git status
哈哈哈,真够少的,今后再碰到什么再加吧,现在先占个位置。
10月21日补:
git撤销add:
例:git add t1.cpp t2.cpp
之后你想撤销对t1.cpp的add,那么只需要
git reset HEAD t1.cpp
就好了。
当然,前提是你还没有commit。
这两天改代码,改完之后发现不合适,干脆删掉文件或者重命名做参考,
于是直接git checkout <filename>重新down一个下来,简单粗暴直接,哈哈。
10月27日补:
git branch 查看本地分支
git branch -a 查看远程分支
11月4日补:
如何撤销已经commit到本地,但是尚未push到server的更改:
git reset ${versionID}
指定好要恢复回去的版本号即可,这个时候已经更改过的内容还是在本地,但是版本已经回到了指定的版本。
如何对比两个版本有哪些文件被改变而不显示具体细节:
git diff --stat ${versionID_01} ${versionID_02}
注意stat之前是两个横杠“ - ”
11月6日补:
有时候习惯用以下命令提交代码:
git commit -asm “the message you want input”
后来发现这样会把不想提交的东西一起提交上去,
今天才发现,问题出在里面这个 a 这个参数上,这里等同于 git -add (其实我还是不太确定这个a 是add 还是all。。。。。哈哈)
11月30日补:
checkout error:error: Your local changes to the following files would be overwritten by checkout: xxxxxxx
xxxxxxx
Please, commit your changes or stash them before you can switch branches.
Aborting
merge error:
error: Your local changes to the following files would be overwritten by merge:
xxxxxxxx
Please, commit your changes or stash them before you can merge.
Aborting
其实人家git以及给你指明了解决方案,----> git stash
git stash 可以将为提价的修改保存在当前分支的当前版本下,准确来说是暂存在栈里,这是条简化版的命令;
git stash save “ message log” 上条命令的精确版,可以写log;
git stash list 可以列举最近几次stash操作的信息,分支、版本号、log等;
git stash show stash@{0} 列举索引为0(即最近一次)的stash操作具体信息,比如修改了那些文件,修改了多少,具体内容看不到;
git show stash@{0} 则是列举索引为0的stash操作的详细内容,个人猜测,实际上内部调用了git diff 的命令,与git diff效果一样;
git stash pop 恢复最近一次stash操作即本命令前索引为0的stash操作,并在stash栈中删除;
git stash pop stash@{0} 恢复指定索引为0的stash操作,并在stash栈中删除;
git stash drop 删除stash栈中内容,默认为最近一次stash操作;
git stash drop stash@{0} 从stash栈中删除指定索引为0的stash操作;
git stash clear 清除stash栈中所有内容;
其实stash的操作还能更精细,但是我没有研究过,等今后用到在写吧,这个是这两天碰到的情况。
12月1日补:
如果已经merge了却想取消怎么办,老办法:
git reset --hard ${VersionGuid}
恩,就这么回事儿。
2017年9月14日补:
如何push指定的某个commit到指定branch:
git push origin [commit-id]:<branch-name>
2020年10月25日补:
暂存区对比:
git diff --staged
git diff --cached
git cherry-pick多个commit:
git cherry-pick commit_1^..commit_n commit_1到commit_9,包含commit_1,commit_9
git cherry-pick commit_1..commit_9 commit_1到commit_9,包含commit_9, 不含commit_1
push 到gerrit,指定reviewer:
%r后面跟的是reviewer邮箱
git push origin HEAD:refs/for/[branch_name]%r=xxxx@xxx.com
git log针对指定文件查看多个commit的变化:
-n 指定最近几次commit,不加-n就是所有commit上关于该文件的变化。
git log -p -n [file_name]