Git

2019-08-21  本文已影响0人  涵仔睡觉

Github

创建目录:

mkdir learngit

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

git init

把文件添加到仓库:

git add <file>

把文件提交到仓库:

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。


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

git reset --hard <commit id>

版本号没必要写全,前几位就可以了,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-keygen -t rsa -C "youremail@example.com"

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


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

git remote add origin git@github.com:chenhan2015/learngit.git

远程库的名字就是origin

git push -u origin master

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

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

git push origin master
git clone git@github.com:chenhan2015/gitskills.git

查看分支:

git branch

创建分支:

git branch <name>

切换分支

:git checkout <name>

创建+切换分支:

git checkout -b <name>

合并某分支到当前分支:

git merge <name>
git merge --no-ff -m "merge with no-ff" <name>

删除分支:

git branch -d <name>

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

git branch -D <name>

查看分支合并图:

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 <name>

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

git tag -a <tagname> -m "blablabla..."
git tag -s <tagname> -m "blablabla..."
git tag
git show <tagname>
git push origin <tagname>
git push origin --tags
git tag -d <tagname>
git push origin :refs/tags/<tagname>

在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]后面,要删除别名,直接把对应的行删掉即可。

上一篇 下一篇

猜你喜欢

热点阅读