git 使用心得

配置

  1. 别名
    ~/.gitconfig中加入下面几行,可以使用更短的命令名字:
    [alias]
    	st = status
    	ci = commit
    	co = checkout
    	br = branch
    
  2. 解决显示中文乱码的问题
    $ git config --global core.quotepath false # 显示 status 编码 
    $ git config --global gui.encoding utf-8   # 图形界面编码 
    $ git config --global i18n.logoutputencoding utf-8	# 输出 log 编码
    

分支管理

  1. 本地创建分支,并提交到远程
    git checkout -b new_branch
    git push -u origin new_branch # -u 即为 --set-upstream
    
  2. 修改分支名字
    git branch -m old_branch new_branch         # Rename branch locally. 如果当前就在old_branch上,可以省略old_branch.    
    git push origin :old_branch                 # Delete the old branch    
    git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote
    

回退

  1. 将某个特定文件回退到上一个版本:
    git checkout HEAD~1 file1/to/restore
    
  2. 临时退回上一个版本测试(将处于detached head状态)
    git checkout HEAD~1
    
    再恢复回来:
    git checkout master
    

Stash

  1. 将单个文件从stash中恢复
    $ git diff stash@{0} HEAD # 比较最近的缓存与当前版本
    $ git diff stash@{0} HEAD -- file_name # 比较特定的文件
    $ git checkout stash@{0} -- <filename> # 恢复特定的文件
    

ref: https://stackoverflow.com/questions/1105253/how-would-i-extract-a-single-file-or-changes-to-a-file-from-a-git-stash

比较stash与HEAD

比较最新的Stash与HEAD,在cmder里不能加{0}:

git difftool stash HEAD

根本原因是终端把大括号{}吃掉了,StackOverflow这里列出了各种解决办法,但似乎在win10+cmder的机器上都不好用。只能用上面这种办法。

Commit

  1. 将别人的commit cherry-pick下来,修改后再提交,需要修改提交者的名字
    git commit --amend --author="your name <your_email@mail.com>"
    

拉取部分代码

# 初始化
git init 
# 添加源
git remote add origin $CLONE_ADDRESS
# 配置sparsecheckout为true
git config core.sparsecheckout true
# 把要拉取的文件目录skynet以及所有的*.sh文件加入到.git/info/sparse-checkout文件中
echo skynet >> .git/info/sparse-checkout
echo *.sh >> .git/info/sparse-checkout
# 拉取文件
git pull origin master

使用meld

作为difftool工具

git difftool使用GUI diff程序(即Meld)显示diff,而不是在终端中显示diff输出。

# Add the following to your .gitconfig file.
[diff]
    tool = meld
[difftool]
    prompt = false
[difftool "meld"]
    cmd = meld "$LOCAL" "$REMOTE"

[注意:这些设置不会改变git diff的行为,它会继续像往常一样工作。]

作为mergetool工具

git mergetool允许您使用GUI合并程序(即Meld)来解决合并期间发生的合并冲突。

# Add the following to your .gitconfig file.
[merge]
    tool = meld
[mergetool "meld"]
    # Choose one of these 2 lines (not both!) explained below.
    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

使Meld忽略尾随空格

忽略尾随空白通常非常有用,尤其是在协作时,可以在Meld首选项文本过滤器选项卡中使用简单的Python正则表达式轻松手动添加。

# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$

参考:https://codeday.me/bug/20180109/116253.html

添加meld右键菜单

如果想在git环境以外比较两个文件,也可以用meld,方法是:

  1. 新建一个meld的快捷方式(找到meld.exe,右键->新建桌面快捷方式),
  2. 在资源管理器中输入shell:sendto,打开“发送到”的文件夹,
  3. 将刚刚的meld快捷方式拖到这个目录中,大功告成,
  4. 使用的时候,选择两个要比较的文件,右键->发送到,这时就可以看到有meld的选项了。

参考:https://www.howtogeek.com/howto/windows-vista/customize-the-windows-vista-send-to-menu/

创建ssh仓库

小团队协作时,可以在一台安装了openssh-server的Linux服务器上配置git仓库,方便协作。方法分两步:1)在服务器上建立仓库容器;2)本地建立仓库并推到远端

服务器上建立仓库容器

  1. 到~目录下:
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
  1. 将本地的id_rsa.pub中的内容复制到服务器的authorized_keys,即添加了本地主机到信任列表。
  2. 在服务器上建立仓库容器:
cd ~
mkdir git_repo && cd git_repo
git init --bare

本地建立仓库并推到远端

  1. cd到代码所在目录
  2. 初始化仓库并推到远端:
git init
git add *.m
git commit -m "init"
git remote add origin ssh://yourname@server_ip:/~/git_repo
git push origin master

服务器上拉取代码

服务器上拉取代码就简单了,因为其实就是在本地拉取:
git clone ~/git_repo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值