Git

Github

创建目录:

mkdir learngit

把这个目录变成Git可以管理的仓库:

git init

把文件添加到仓库:

git add 

把文件提交到仓库:

git commit
git commit -m "本次提交说明"

仓库当前的状态: (告诉我们哪些文件被修改了)

git status

查看修改内容:

git diff

查看历史记录:

git log
git log  --pretty=oneline   (每个记录在一行显示)

版本回退:

git reset --hard HEAD^

在Git中,用HEAD表示当前版本,也就是最新提交的commitid,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。


版本回退,回退版本之前的版本都不见了

  • 若命令行窗口还未关闭,则可以查看某个版本的commit id,用以下命令恢复:
git reset --hard 

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

  • 若已经关闭,以下命令记录每一次命令:
git reflog

丢弃工作区的修改:

git checkout -- filename

自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态

把暂存区的修改撤销掉:

git reset HEAD filename

工作区删除文件:

rm filename

从版本库中删除该文件:

git rm filename    
git commit -m "......."

把误删的文件恢复到最新版本:

git checkout -- filename

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

  • 创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  • 登陆GitHub,打开“Account settings”,“SSH Keys”页面。然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”。

在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得:

  • 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。目前在GitHub上的这个learngit仓库还是空的
  • 把一个已有的本地仓库与GitHub上的learngit仓库关联:
git remote add origin [email protected]:chenhan2015/learngit.git

远程库的名字就是origin

  • 把本地库的所有内容推送到远程库上:
git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

此后,每次本地提交后,只要有必要,就可以使用命令推送最新修改

git push origin master
  • 从远程库克隆一个仓库gitskills.git到本地:
git clone [email protected]:chenhan2015/gitskills.git

查看分支:

git branch

创建分支:

git branch 

切换分支

:git checkout 

创建+切换分支:

git checkout -b 

合并某分支到当前分支:

git merge 
git merge --no-ff -m "merge with no-ff" 

删除分支:

git branch -d 

如果要丢弃一个没有被合并过的分支,可以通过以下命令强行删除:

git branch -D 

查看分支合并图:

git log --graph
git log --graph --pretty=oneline --abbrev-commit

把当前工作现场“储藏”起来:

git stash

查看工作现场:

git stash list

恢复工作现场:

git stash apply

删除工作现场:

git stash drop

恢复并删除工作现场:

git stash pop

可以多次stash,恢复的时候,先用

git stash list

查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

多人协作的工作模式通常是这样:

  • 首先,可以试图推送自己的修改
git push origin branch-name
  • 如果推送失败,则因为远程分支比你的本地更新,需要先试图合并
git pull
  • 如果合并有冲突,则解决冲突,并在本地提交;

  • 没有冲突或者解决掉冲突后,再推送就能成功:

git push origin branch-name

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令

git branch --set-upstream branch-name origin/branch-name

  • 查看远程库信息,使用
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 tag 

默认为HEAD,也可以指定一个commit id;

  • 指定标签信息:
git tag -a  -m "blablabla..."
  • 用PGP签名标签:
git tag -s  -m "blablabla..."
  • 查看所有标签:
git tag
  • 看到说明文字:
git show 
  • 推送一个本地标签
git push origin 
  • 推送全部未推送过的本地标签
git push origin --tags
  • 删除一个本地标签
git tag -d 
  • 删除一个远程标签
git push origin :refs/tags/

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
.gitignore文件无法添加,可以加-f强制添加到Git:

git add -f filename

检查.gitignore文件规则:

git check-ignore -v filename

配置别名:

git config --global alias.st status

--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用,Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。
不加--global参数,那只针对当前的仓库起作用,每个仓库的Git配置文件都放在.git/config文件中。
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

你可能感兴趣的:(Git)