Git命令

刚开始学习Python的时候,我希望能够尽最大可能的窄化学习内容,于是命令行这些能省就省,版本管理也用图形化界面的SourceTree。周六下午的深圳线下聚会中,深圳教练弓和箭说,这些还是要学的,于是准备用一天时间(依然不想)学习一下Git最简单的几个命令。

目标

脱离图形化界面的SoureceTree,并实现双推(分别将新版本文件推送至Github和Gitbook)和多推(包括加分题160推)。

初始化后的几个基础命令

git init # 仓库初始化
git add # 添加文件到暂存(这里可以依次add很多次修改,然后一次commit就全部提交。同一个文件有多次修改、每次修改后都add一次,add命令只将前一次修改添加到暂存区)。
git commit -m"" # -m"xxx"这里是提交日志,就是说本次commit改了些什么

检查仓库状态,查看修改内容

git status # 仓库状态,看是否有文件修改了。
git diff # 查看修改内容(只能在文件被add之前查看区别,一旦被add则无法查看修改内容)。

在不同文件版本之间跳跃

HEAD # 指当前版本。
HEAD^ # 指前一个版本
HEAD^^ # 指前两个版本
HEAD~100 # 指前100个版本
git reset --hard [commit_id] # 指跳跃到某个版本
git log # 查看提交历史,以便回退
git reflog # 查看命令历史,以便前进到未来的某个版本

撤销修改

git checkout -- file # 丢弃工作区的修改
git reset HEAD file # 丢弃缓存区的修改

删除文件

rm file # 删除工作区中的该文件
git rm file # 删除版本库中的该文件
git checkout -- file # 用版本库的版本恢复工作区的版本

上图是我理解的Git命令中几个关键动作的逻辑,不知是否正确,请指教! git reset

配置SSH

用Git链接Github远程仓库,需要首先配置ssh。我OS X与Win系统双持,因此两个系统都需要单独配置ssh。 Mac的SSH配制方法 PC的SSH配制方法

一个小问题

然而在配置PC的SSH时,出现了一个小问题。 按照教程的Step3-1,我用的终端为Git Bash,因此应该输入以下代码:

ssh-agent -s

但是,得到的结果和教程有区别:

SSH_AUTH_SOCK=/tmp/ssh-3aaVdTkjdnG0/agent.7204; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7724; export SSH_AGENT_PID;
echo Agent pid 7724;

我忽略之,继续Step3-2,输入:

ssh-add ~/.ssh/id_rsa

立刻出现了以下错误信息:

Could not open a connection to your authentication agent

对这种情况完全没有头绪,不清楚问题出在哪里,火速上stackoverflow抱大腿: Stackoverflow上的答案 答案告知运行以下代码试试:

eval "$(ssh-agent)"

随后问题解决!

小问题回顾

我又仔细回顾了一下这个问题,发现其实在官方帮助文件PC的SSH配制方法中确实提到过这个方法,但是是在使用Git Bash以外的其他终端的情况下。我使用的恰恰是Git Bash啊,为什么也需要用这种方法打开ssh agent?

Git版本2.6.1

ssh agent

遗留问题

每次将本地代码推送至Github的远程仓库时,都问我一遍密码,目前还未解决,只能每次push都输入一遍了。 ask password

添加、克隆远程库

git remote add origin [email protected]:zjuguxi/python.git # 将本地仓库与远程仓库关联起来
git push origin master 将本地代码推送至远程库
git clone [email protected]:xxx/yyy.git # 从远程仓库克隆到本地

管理分支

git branch # 查看分支
git branch name # 创建分支
git checkout name # 切换分支
git checkout -b name # 创建+切换分支
git merge name # 合并某分支到当前分支
git branch -d name # 删除分支

gitignore

.gitignore文件中配置在工作目录中、但不会被提交的文件 Python的gitignore

配置别名

Git命令可以用别名来替代

git config --global alias.st stasus # 用st代替status

当前用户的Git配置文件在主目录下的一个隐藏文件.gitconfig中。 配置别名可以直接修改这个文件,如果出错,可以删掉文件重新通过命令行配置。

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = [email protected]

略过的部分

我通过廖雪峰的Git教程进行学习,虽然已经是精简教程,但是仍然有大量(对我来说)平时用不到的内容,以下为我略过的部分。有兴趣可自行查考。

  • 分支管理
    • 解决冲突
    • 分支管理策略
    • Bug分支
    • Feature分支
    • 多人写作
  • 标签管理
    • 创建标签
    • 操作标签
  • 搭建Git服务器

朱老师推荐的Git简明教程

这里再推荐一点补充材料,由朱作君老师推荐的一些更为简练的教程,确实不错,有兴趣可以看一看

http://rogerdudler.github.io/git-guide/index.zh.html

http://yedingding.com/2013/09/11/practical-git-flow-for-startups.html