2 Star 1 Fork 0

zhrun8899 / learning-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
git-scm.md 15.65 KB
一键复制 编辑 原始数据 按行查看 历史
zhrun8899 提交于 2019-08-15 14:35 . 20190815 commit

拉取分支管理

察看远程分支 git branch -a

察看本地分支 git branch

本地建立分支:git branch -d xxx

本地切换到分支:git checkout xxx

拉取远程分支 :git checkout -b xxx origin/xxx

git修改远程仓库地址方法有三种:

1.修改命令

git remote origin set-url [url]

2.先删后加

git remote rm origin git remote add origin [url]

3.直接修改config文件

gitignore

不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:

忽略操作系统自动生成的文件,比如缩略图等; 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件; 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

回退

场景1:

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:4

当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:

已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。 HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

删除文件

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

  • 1.$ rm test.tx
  • 确实要删除 git rm test.txt ;git commit;
  • 删除错了,要找回来 :git checkout -- test.txt ; 注意:只能找回最新的版本了

远程库

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

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

分支

查看分支:git branch

创建分支:

git branch

切换分支:

git checkout

创建+切换分支:

git checkout -b

合并某分支到当前分支:

git merge git merge --no-ff -m "merge with no-ff" dev 请注意--no-ff参数,表示禁用Fast forward: 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

删除分支:

git branch -d git branch -d feature1 git branch -D feature1 # 强制删除 与远程dev分支建立链接 git branch --set-upstream-to=origin/dev dev push时有冲突需要先拉下来最新的分支,解决冲突再add,commit ,push git pull

rebase

rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

tag

git tag v1.0 git tag v0.9 f52c633 # f52c633 提交号 git show 显示标签信息 注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

  • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • 命令git tag -a -m "blablabla..."可以指定标签信息;

  • 命令git tag可以查看所有标签。 删除标签 git tag -d v0.1 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin 操作标签 如果标签打错了,也可以删除:

$ git tag -d v0.1 Deleted tag 'v0.1' (was f15b0dd) 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin :

$ git push origin v1.0 Total 0 (delta 0), reused 0 (delta 0) To github.com:michaelliao/learngit.git

  • [new tag] v1.0 -> v1.0 或者,一次性推送全部尚未推送到远程的本地标签:

$ git push origin --tags 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9 Deleted tag 'v0.9' (was f52c633) 然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

应用场景

两个人合作,其中一人提交了tag,另外一人也想拿到 A:git push orogin --tags B:git pull B:git tag #应该可以看到了

stash功能

可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作: git checkout -b dev-zhrun vi Readme.md git stash git checkout master git checkout -b issue-101 vi Readme.txt git add -A git commit -m"bug-101 fixed" git checkout master git merge issue-101 git push origin master git branch -d issue-101 git checkout dev-zhrun git stash list git statsh pop

gitignore

或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:

$ git check-ignore -v App.class git add -f App.class 强制添加

命令

显示当前分支的版本历史

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

显示当前的Git配置

$ git config --list

可以添加一个或多个

$ git add <file1> <file2>...
#添加所有修改的和新添加的
$ git add .
另一种写法
$ git add -A

恢复上一次add提交的所有file

$ git reset HEAD

提交到本地仓库(commit操作)

提交暂存区的所有文件(后面的message不可缺少)

$ git commit -m <message>

提交暂存区的指定文件

$ git commit <file1> <file2> -m <message>

.gitignore的配置:

缘由:当我们导入一个git项目时,开发环境会改变里面的一些配置,当我们修改完代码后,add,commit操作后,系统更改的配置信息,并不想去提交,这个时候就会用到这个配置,配置完成后,才更好的去add .和commit -m去操作。

gitignore处理

要在Git BashHere这里面操作 ​ $ touch .gitignore

#1.安装: ​ $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

yum install curl-devel expat-devel gettext-devel   openssl-devel zlib-devel

2.下载 git 源码

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

3.源码安装

3.1 解压

tar -zxf git-2.9.5.tar.gz

3.2 安装

cd git-2.9.5
make prefix=/usr/local all

cc error
在linux系统上对redis源码进行编译时提示提示“make cc Command not found,make: * [adlist.o] Error 127”。这是由于系统没有安装gcc环境,因此在进行编译时才会出现上面提示,当安装好gcc后再进行编译时,上面错误提示将消失

解决:yum install gcc

perl Makefile.PL 出现Can't locate ExtUtils/MakeMaker.pm

解决: yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker cpan

3.3 安装

make prefix=/usr/local install

4. 编译好的文件安装

yum install git-core

5.在 Windows 上安装

在 Windows 上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行: http://msysgit.github.com/

6.试用

git --version

检查当前文件状态

要确定哪些文件当前处于什么状态,可以用 git status 命令。如果在克隆仓库之后立即执行此命令,会看到类似这样的输出: $ git status

git remote -v 显示所有远程信息 #7.server搭建 1.创建git用户 useradd git ,passwd git 2.禁用git用户shell登录 #8.第三步,创建证书登录: 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 #9.客户端操作,生成key 每次提交修改到服务器的时候都会要求输入密码,这个比较麻烦,为了解决这个问题,可以将客户端用户ssh key写入服务器端git用户的authorized_keys文件中,具体操作

1、在客户端shell命令行输入: ssh-keygen 会在~/.ssh/id_rsa.pub 这个公钥文件 windows:会让选择目录,;默认:(/c/Users/Administrator/.ssh/id_rsa)

2、把上面这个公钥文件内容上传到git服务器,保证git用户可读

服务器在su到git用户状态时输入 cat id_rsa.pub >> ~/.ssh/authorized_keys

#10.服务器端 Git 打开 RSA 认证

进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:

RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

保存并重启 sshd 服务:

[root@localhost ssh]# /etc/rc.d/init.d/sshd restart 由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys #11.客户端命令 ##1.clone git clone git@192.168.0.118:/git/test.git test1 ##2.各源同步本地更改 第一次 git push -u origin master 以后: git push origin master 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。 如果要推送其他分支,比如dev,就改成: $ git push origin dev ##3.更改后添加到提交staged,本地 git add somefile ##4.提交更改(本地) git commit ##5.关联一个远程库 git remote add origin git@server-name:path/repo-name.git ##6.分支 察看:git branch 创建分支:git branch 切换分支:git checkout 创建+切换分支:git checkout -b 切换回master分支:$ git checkout master 把dev分支的工作成果合并到master分支上:git merge dev 删除dev分支:$ git branch -d dev git branch -D branch_name 合并dev分支,禁用fast-forward:git merge --no-ff -m "merge with no-ff" dev

分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 下面我们实战一下--no-ff方式的git merge: 首先,仍然创建并切换dev分支: $ git checkout -b dev switched to a new branch 'dev' 修改readme.txt文件,并提交一个新的commit: $ git add readme.txt $ git commit -m "add merge" [dev 6224937] add merge 1 file changed, 1 insertion(+) 现在,我们切换回master: $ git checkout master Switched to branch 'master' 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward: $ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+) 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。 合并后,我们用git log看看分支历史: $ git log --graph --pretty=oneline --abbrev-commit

  • 7825a50 merge with no-ff |
    | * 6224937 add merge |/
  • 59bc1cb conflict fixed ... 可以看到,不使用Fast forward模式,merge后就像这样: git-no-ff-mode ##7.分支策略 在实际开发中,我们应该按照几个基本原则进行分支管理:

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

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; ##8. 创建一个工作现场:git stash 列出:git stash list 恢复工作现场并删除:git stash pop=git stash apply+git stash drop ##9.察看远程库的信息 git remote -v

10.把最新的提交从origin抓下来

git pull 对应的反动作是push ##11.多人协作的工作模式: ###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 checkout -b branch-name origin/branch-name 建立本地分支和远程分支的关联: git branch --set-upstream branch-name origin/branch-name ##12.标签 $ git branch

  • dev master $ git checkout master Switched to branch 'master' 然后,敲命令git tag 就可以打一个新标签: $ git tag v1.0 可以用命令git tag查看所有标签: git tag v0.9 6224937,其中的6224937是用git log查出来的 $ git tag 删除:$ git tag -d v0.1 标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除: $ git tag -d v0.9 Deleted tag 'v0.9' (was 6224937) 然后,从远程删除。删除命令也是push,但是格式如下: $ git push origin --delete tag show

推送某个标签到远程,使用命令git push origin : 次性推送全部尚未推送到远程的本地标签:$ git push origin --tags

##13 remote 关联远程库:git remote add origin git@192.168.0.118:/git/test/git 查看远程库信息:git remote -v 删除已关联的名为origin的远程库 :git remote rm origin 使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库 git remote add github git@github.com:michaelliao/learngit.git git remote add gitee git@gitee.com:liaoxuefeng/learngit.git ##14.git config --global color.ui true $ git config --global alias.st status git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch git config --global alias.last 'log -1' git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" ##15.忽略特殊文件 .gitignore文件

Windows:

Thumbs.db ehthumbs.db Desktop.ini

auto created files

最后一步就是把.gitignore也提交到Git.git add .gitignre git commit ##16.撤销修改 git checkout -- readme.txt 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况: 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 ##17.撤销add git reset HEAD readme.txt git reset --hard commitNo 重新回到某版本号 显示所有提交:git reflog 然后可以再回到较新版本

1
https://gitee.com/zhrun8899/learning-notes.git
git@gitee.com:zhrun8899/learning-notes.git
zhrun8899
learning-notes
learning-notes
master

搜索帮助