Git学习笔记

  |   0 评论   |   0 浏览

git config:设置控制 Git 外观和行为的配置变量

用户信息

git config --global user.name "songaw"

git config --global user.email 50330690@qq.com

设置文本编辑器

git config --global core.vim

检查配置信息

git config --list

获取帮助

git help

git help config

获取git 仓库 :有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。

在现有目录中获取初始化仓库:

git init

git add *.txt

git commit -m 'msg'

克隆现有的仓库

git clone [url]

克隆仓库的命令格式是 git clone [url] 比如,要克隆 Git 的可链接库 libgit2,可以用下面的命令:

$ git clone https://github.com/libgit2/libgit2

如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用如下命令:

$ git clone https://github.com/libgit2/libgit2 mylibgit

Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。 在服务器上搭建 Git将会介绍所有这些协议在服务器端如何配置使用,以及各种方式之间的利弊。

pwd 命令是用于显示当前的目录。

查看文件到底修改了什么内容

git diff t.txt

版本回退

git reset -hard HEAD^ 回退上个版本

git reset -hard HEAD^ 回退上上个版本

git reset -hard HEAD~100 回退上100个版本

git reset -hard 版本号 回退到版本号

git reflog 查看操作的版本号

<font face="\Microsoft YaHei UI\">git reset HEAD file</font>可以把暂存区的修改撤销掉

查看下历史记录

git log

删除文件

rm t.txt 彻底删除 commit命令提交掉

只要没有commit之前,在版本库中恢复此文件操作

git checkout --t.txt

创建gitHub的SSH传输加密的key

$ ssh-keygen -t rsa -C "50330690"
在github里创建sshkey

使用git在本地創建一個項目的過程

    $ makdir ~/hello-world    //創建一個項目hello-world
    $ cd ~/hello-world       //打開這個項目
    $ git init             //初始化 
    $ touch README
    $ git add README        //更新README文件
    $ git commit -m 'first commit'     //提交更新,並注釋信息「first commit」
    $ git remote add origin git@github.com:defnngj/hello-world.git     //連接遠程github項目  
    $ git push -u origin master     //將本地項目更新到github項目上去

git fetch origin 获取项目

error: failed to push some refs to 解决:
出现错误的主要原因是github中的README.md文件不在本地代码目录中

可以通过如下命令进行代码合并【注:pull=fetch+merge]

git pull --rebase origin master

此时再执行语句 git push -u origin master即可完成代码上传到github

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

用带参数的git log也可以看到分支的合并情况:

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

禁用g。

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

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

Err

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

解决方法:

rm -f ./.git/index.lock

Bug分支:

1 git stash 储藏工作现场

  1. 确定修复哪个分支上的BUG 假定master上修复,就在master创建临时分支
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
$ git checkout -b issue-101
Switched to a new branch 'issue-101'

修复BUG

$ git add readme.txt 
$ git commit -m "fix bug 101"
[issue-101 cc17032] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master 
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
 readme.txt |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git branch -d issue-101
Deleted branch issue-101 (was cc17032).

回到原来的分支工作

$ git checkout dev
Switched to branch 'dev'
$ git status
# On branch dev
nothing to commit (working directory clean)

用git stash list命令查看工作现场:

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

$ git stash pop

再用git stash list查看,就看不到任何stash内容了:

$ git stash list

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

Feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

多人协作:

查看远程库的信息,用git remote

git remote -v显示更详细

过滤不能用:

git rm --cached <文件名> 删除文件的缓存
git rm --cached -r <目录名> 删除目录下的所有文件的缓存
多人协作

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

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用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 -a v1.1.4 -m "tagging version 1.0"  

给指定的提交打标签

1.查看提交commit_id

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

2.打标签

$ git tag -a v0.1 -m "version 0.1 released" 5cfdd72

查看标签:

git tag

显示标签信息:

git show v1.0

私银签名打标签a7ed81c

$ git tag -s v0.2 -m "signed version 0.2 released" fec145a

签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:

gpg: signing failed: secret key not available