Git & GitHub学习小结

来源:互联网 发布:全球高清网络电视重播 编辑:程序博客网 时间:2024/05/14 12:42

  *注:我学习Git的平台为Windows,学习工具为Babun。
  

// 设置用户名和Email地址

git config --global user.name "Your Name"
git config --global user.email "email@example.com"
  当然也可以直接修改用户目录下的 .gitconfig 文件,在文件中添加:

[user]
    name = Your Name
    email = email@example.com

或直接修改git仓库中的 .git 文件夹里的 config 文件,不过前两种是全局的(即所有的仓库都是这个用户名和Email),而后一种在git仓库中修改的方法是局部的(即只有该仓库的用户名和Email是设置的这个,其它的仓库需要重新设置)。

创建仓库:git init
  

// 在版本库中添加文件(分两步)

将文件添加到仓库:git add <file>
将文件提交到仓库:git commit -m "description"

查看仓库状态(是否修改,是否提交):git status
查看修改内容:git diff <file>
查看工作区和版本库里面最新版本的区别:git diff HEAD -- <file>

查看各版本提交内容:git log
查看命令历史:git reflog
回到上一版本(HEAD指最近提交的一个版本):git reset --hard HEAD^git reset --hard HEAD~1
跳转到指定版本(commit_id指版本id):git reset --hard <commit_id>

// git add 将文件修改从工作区添加到暂存区,git commit 将文件修改从暂存区添加到版本库
撤销修改:1. git checkout -- <file> 丢弃工作区的修改;
     2. git reset HEAD <file> 丢弃暂存区的修改信息;

git rm <file> 删除工作区文件并将删除信息添加到暂存区,
这时如果还没有提交(即 git commit),可通过两步撤销删除,
首先撤销暂存区的删除信息:git reset HEAD <file>
再撤销工作区的文件删除:git checkout -- <file>
当然如果已经提交了,就只能回退版本了。

// 使用远程仓库

创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com"
  输入此命令后,在用户目录下.ssh目录中生成 id_rsa 和 id_rsa.pub 两个文件,id_rsa 是私钥,不能泄露,id_rsa.pub 是公钥,需要给别人。点击GitHub的“Settings”中的“SSH and GPG keys”,点击“New SSH key”,在key文本框里粘贴id_rsa.pub文件中的内容即可,Title任意填。

关联远程版本库:git remote add origin git@server-name:path/repo-name.git
  GitHub中远程库地址:点击“Clone or download”可显示 或 直接显示在“HTTPS|SSH”后面的文本框中。

第一次提交远程版本库:git push -u origin master
以后提交远程版本库:git push origin master
我在提交远程库的时候,出现以下问题:

{ Git } master » git push -u origin master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0670 for ‘/home/user/.ssh/id_rsa’ are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
Load key “/home/user/.ssh/id_rsa”: bad permissions
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决方法为:更改id_rsa权限:

{ .ssh } » chmod 600 id_rsa

参考资料:解决id_rsa权限不够 (http://robinwu.iteye.com/blog/1216647)

从远程库克隆一个本地库:git clone git@server-name:path/repo-name.git

// 建立分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>不推荐);
删除分支:git branch -d <name>

查看分支合并图:git log --graph

//合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能用git log –graph看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并,这种合并要创建一个新的commit,所以加上-m参数,把commit描述写进去,命令如下:
git merge --no-ff -m "merge with no-ff" <name>推荐使用这一种方式合并分支)。

// 当要去做另一分支上的事,而当前分支又没完成,可先:
保存当前工作:git stash
查看保存的工作:git stash list
// 当另一分支做完并提交后,再回到当前分支,
恢复当前工作并删除保存工作列表:git stash pop

// 多人协作时

查看远程库信息,使用git remote -v
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
再从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
  *注:不推荐直接使用git pull,而应该使用git fetch origin branch-name,git fetch是从远程分支获取最新的版本到本地但不合并,这样就可以方便我们对比查看更新情况,然后再决定是否合并;git pull相当于git fetch 和 git merge,直接抓取并合并。

参考资料:Git fetch和git pull的区别(http://blog.csdn.net/hudashi/article/details/7664457)

// 管理标签

新建一个标签(默认为HEAD):git tag <name>
也可以指定一个commit id:git tag <name> <commit_id>
指定标签信息:git tag -a <tagname> -m "description"
查看所有标签:git tag
查看标签信息:git show <tagname>

推送一个本地标签到远程:git push origin <tagname>
推送全部未推送过的本地标签:git push origin --tags
// 删除远程标签,要先
删除一个本地标签:git tag -d <tagname>
// 再
删除一个远程标签:git push origin :refs/tags/<tagname>

// 忽略特殊文件

将要忽略的文件名写入.gitignore文件中,然后commit即可(可使用通配符*)。

参考资料

[1] Git教程(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

0 0