Git使用Tips

一些有用的Tips。

Clone远程仓库的某个分支

如果Clone远程仓库的时候,只想clone其中的某个分支,可以运行命令

git init
git remote add -t feature-add-menu -f origin https://github.com/workflow/learngit.git
git checkout feature-add-menu</span>
-t选项制定branch名,可以用多个-t指定多个branch。 -f选项表示立即进行一次fetch操作。


查看文件内容的变更历史

git blame <filename>
这个命令可以将文件中的每一行是在哪一次提交中变更的,提交时间,提交作者等展示出来。这可以很容易追溯到问题的起源。
可以加上-c 选项让输出可读性更好一些。

保存/恢复未提交的更改

如果正在修改,还不能提交,但又需要回到未修改前的状态做一些其他事情,git stash命令可以帮助做到这一点。
你可以多次运行git stash命令,git可以为你保存多个暂存区。
- 保存当前修改到暂存区并把工作区回退到未修改前的状态 git stash
- 显示暂存区列表 git stash list
- 恢复暂存区内容 git stash pop [<stash>] 或者 git stash apply [<stash>]
pop会从暂存区列表中删掉恢复的内容,apply不会。
可以指定恢复对象,例如stash@{0},stash@{1}...
如果不指定恢复对象,默认是stash@{0}
- 清除所有的暂存内容 git stash clear

图形化显示提交历史

命令 “git log --graph --oneline --all”
如果不加--all选项就只能看到当前branch的历史。

比较两个分支

git cherry -v branch_name
比如git cherry -v master可以比较当前分支上的提交是否也在master分支上。
显示结果中+表示本分支上比master分支多的提交;-表示少的提交。

打开pull的rebase选项

如果大家都在同一个branch上工作,给git pull加上rebase选项可以保证干净的工作树。
可以运行“git config branch.BRANCH_NAME_HERE.rebase true” 来给指定的分支总是加上rebase选项。

修改commit注释/压缩commit

如果commit注释写错,需要修改
1)如果是最近一次commit,并且还没有push,输入git commit --amend,然后修改message。
在Git里面,commit的注释也是提交的一部分,所以修改了注释之后,commit的ID(SHA1 Hash)也会变。

2)如果是最近一次commit,并且已经push,输入git commit --amend,然后修改message。
但是这样实际上是相当于reset到前一次提交,然后重新产生了一个提交,必须加上--force才能push上去。

3)如果需要修改之间某(几)次的commit,通过git rebase -i head~n命令。
例如,当前的提交历史
* 8a4ead7 patch4
* edee534 patch?
* 232d990 patch2
* e84c254 patch1

想要修改edee534的提交注释,运行 git rebase -i head~2
pick edee534 patch?
pick 8a4ead7 patch4


# Rebase 232d990..8a4ead7 onto 232d990 ( 2 TODO item(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

rebase相当于把所有这些提交重新做一遍,这里的提示很详细,可以看出需要把第一行的pick修改成reword,然后wq退出。
reword edee534 patch?
pick 8a4ead7 patch4

这时候会要求输入新的message。把 patch? 修改为 patch3
再查看提交历史,就会变成
* d1fbe67 patch4
* bde9e11 patch3
* 232d990 patch2
* e84c254 patch1


4)如果想把几次提交压缩称为一个,也是通过rebase命令。比如要把上面的patch1~4这四次提交压缩为一次。
运行命令git rebase -i head~4
然后修改如下,wq保存退出。(s为squash命令缩写)
pick e84c254 patch1
s 232d990 patch2
s bde9e11 patch3
s d1fbe67 patch4

之后Git会要求你修改message。默认的message里面包含了这4次提交的所有message。
这里修改为patch1~4。
再查看提交历史,就会只剩下一次提交了。
* 821bb26 patch1~4




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值