下载地址
- yum 安装
安装步骤
-
设置yum源,采用yum安装。
epel
-
安装
yum install -y git
-
安装生成主要文件
/usr/bin/git
修改配置
-
配置一
git config --global user.email “test@examle.com”
git config --global user.name “kim”
命令参数说明
命令行 | 参数说明 | 备注 |
---|---|---|
git init | 初始化仓库 | 备注1 |
git add | 增加一文件至仓库 使用命令git add <file>,注意,可反复多次使用,添加多个文件,空格隔开,git add . (增加所有) | 备注2 |
git commit -m “message” | 提交至仓库并注明 | 备注3 |
git status | 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 | |
git log | 用git log可以查看提交历史,以便确定要回退到哪个版本。 | |
git diff | 查看不同之处 | |
git reflog | 用git reflog查看命令历史,以便确定要回到未来的哪个版本。 | |
git reset --hard commit_id | HEAD^ HEAD^^ |
常用实例
关联github仓库
git remote add origin git@github.com:77437187/test.git (需要在github新增ssh公钥)
git remote add origin https://github.com/77437187/learngit.git
git remote add origin http://用户名:密码@git-yw.wens.com.cn/193420/bigscreen-uwsgi.git
本地库的所有内容推送到远程库(本地库需要git commit)
git push -u origin master
Git鼓励大量使用分支:
查看分支:git branch
[root@centos7-ali test]# git branch
* dev
master
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name> 命令用于合并指定分支到当前分支
删除分支:git branch -d <name>
访问
Quick setup — if you’ve done this kind of thing before
or
Get started by creating a new file or uploading an existing file. We recommend every repository include a README, LICENSE, and .gitignore.
…or create a new repository on the command line
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/77437187/test.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin https://github.com/77437187/test.git
git push -u origin master
git clone git@github.com:77437187/gitlearn.git
git pull
------------------
git pull的作用是,从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge。完整格式是:
$ git pull <远程库名> <远程分支名>:<本地分支名>
比如,取回远程库中的develop分支,与本地的develop分支进行merge,要写成:
git pull origin develop:develop
如果是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写。
git pull origin develop
通常,git会将本地库分支与远程分支之间建立一种追踪关系。比如,在git clone的时候,所有本地分支默认与远程库的同名分支建立追踪关系。也就是说,本地的master分支自动追踪origin/master分支。因此,如果当前处于本地develop分支上,并且本地develop分支与远程的develop分支有追踪关系,那么远程的分支名可以省略:
git pull origin
其实,git pull 命令等同于先做了git fetch ,再做了git merge。即:
git fetch origin develop
git checkout develop
git merge origin/develop
分2部分
工作区 版本库(分 暂存区 和 master分支)
git init
vim t.txt
git add t.txt ##放到暂存区
git commit -m 'first add files'
vim t.txt
git diff
git status
git log --pretty=oneline
注意: 修改内容如果没有提交, git reset没有提交的内容就会清空。
回退当前版本
git reset --hard HEAD
回退上一个版本
git reset --hard HEAD^
回退上上一个版本
git reset --hard HEAD^^
回退指定版本
git reset --hard 1094a
查找comit log
$ git reflog
47a79b3 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
80d066d HEAD@{1}: reset: moving to HEAD^
fc93ae0 HEAD@{2}: reset: moving to HEAD
fc93ae0 HEAD@{3}: reset: moving to fc93ae00942b7ed531c7f41a91cc770565d28d5e
80d066d HEAD@{4}: reset: moving to HEAD
80d066d HEAD@{5}: reset: moving to HEAD^
fc93ae0 HEAD@{6}: reset: moving to HEAD
fc93ae0 HEAD@{7}: commit: 增加内容3
80d066d HEAD@{8}: commit: 增2.txt文件
47a79b3 (HEAD -> master) HEAD@{9}: reset: moving to HEAD^
325e40c HEAD@{10}: commit: add five
47a79b3 (HEAD -> master) HEAD@{11}: commit: 3
4b9fecb HEAD@{12}: commit: two
7b727ac HEAD@{13}: commit (initial): t1
193420@DESKTOP-MJ07HMN MINGW64 /e/wp (master)
$ git reset --hard fc93ae0
HEAD is now at fc93ae0 增加内容3
193420@DESKTOP-MJ07HMN MINGW64 /e/wp (master)
$ git reset --hard 80d066d
HEAD is now at 80d066d 增2.txt文件
193420@DESKTOP-MJ07HMN MINGW64 /e/wp (master)
$ git reset --hard fc93ae0
HEAD is now at fc93ae0 增加内容3
193420@DESKTOP-MJ07HMN MINGW64 /e/wp (master)
提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- 2.txt
diff --git a/2.txt b/2.txt
index 4e01e77..2b4e87c 100644
--- a/2.txt
+++ b/2.txt
@@ -3,4 +3,7 @@
3 增加内容3
-55555
\ No newline at end of file
+55555
+
+666 ####红色 与缓存区的区别
+777 #### master区别
git checkout -- file可以丢弃工作区的修改:
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 (reset 回退版本不经过缓存区)
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
操作缓存区
git reset HEAD readme.txt
Git同样告诉我们,用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:
回退当前版本
git reset --hard HEAD
总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
工作区删除文件:
rm 2.txt
之后版本库删除文件
git rm 2.txt
git commit
删除错了恢复
git checkout -- 2.txt
关连方法一
关连远程库:(origin 为习惯名名, 表示为远程库)
git remote add origin git@github.com:michaelliao/learngit.git
git remote add origin https://gitee.com/kim2008/wp.git
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push -u origin master
##不要在在gitee上初始化仓库, push时报错
git push -f origin master (强制push 小心, 远程库完全更新)
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
查询远程库信息
$ git remote -v
origin https://gitee.com/kim2008/wx.git (fetch)
origin https://gitee.com/kim2008/wx.git (push)
查询远程对应关系
[root@master01 docker_file]# git branch -vv
* master 35abdd9 [gitee/master] initrepo
删除远程库
git remote rm origin
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
关连方法二
如果在gitee上初始化了仓库, 那就直接
git clone https://gitee.com/kim2008/myrepo.git
分支:
创建分支
git checkout -b dev
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看当前分支:
$ git branch
* dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号
git checkout master 切换分支(一种命令两种用法)
我们注意到切换分支使用git checkout <branch>,而前面讲过的撤销修改则是git checkout -- <file>,同一个命令,有两种作用,确实有点令人迷惑。
新版本提供switch命令切换分支
git switch -c dev
-d删除分支
$ git branch -d dev
Deleted branch dev (was b17d20e).
合并分支
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
$ git add readme.txt
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed
上传分支
git push origin master
git push origin dev
下载分支
$ git checkout -b dev origin/dev
因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
再pull:
创建标签 git tag v1.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了:
$ git log --pretty=oneline --abbrev-commit
12a631b (HEAD -> master, tag: v1.0, origin/master) merged bug fix 101
4c805e2 fix bug 101
e1e9c68 merge with no-ff
f52c633 add merge
cf810e4 conflict fixed
5dc6824 & simple
14096d0 AND simple
b17d20e branch test
d46f35e remove test.txt
b84166e add test.txt
519219b git tracks changes
e43a48b understand how stage works
1094adb append GPL
e475afc add distributed
eaadf4e wrote a readme file
比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:
$ git tag v0.9 f52c633
git tag
git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
git push origin <tagname>:
如果要推送某个标签到远程,使用命令git push origin <tagname>:
$ 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
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
* [new tag] v0.9 -> v0.9
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
- [deleted] v0.9
要看看是否真的从远程库删除了标签,可以登陆GitHub查看。
https://www.liaoxuefeng.com/wiki/896043488029600/1163625339727712
我们可以删除已有的GitHub远程库:
git remote rm origin
git remote add github git@github.com:michaelliao/learngit.git
打包下载单个文件,或者文件夹(先得设置ssh公私钥使用。 私钥放在用户家目录.ssh下, 公钥放到仓库的设置里)
git archive --remote=git@gitee.com:kim2008/drf_studay.git master app01/apps.py -o t2.tar.gz
下载整个库
git archive --remote=git@gitee.com:kim2008/drf_studay.git master -o t2.tar.gz
git push -u 命令中的 -u 或 --set-upstream 参数用于设置本地分支与远程分支之间的上游关系。这个参数在首次推送本地分支到远程仓库时特别有用,因为它会同时创建远程分支,并设置本地分支来跟踪这个远程分支。
解析这个命令和参数:
git push: 这是一个命令,用于将本地分支的更改推送到远程仓库。
-u 或 --set-upstream: 这是一个选项,用于设置上游关系。
当你首次推送一个本地分支到远程仓库时,你可能想要这个本地分支自动跟踪远程仓库中的对应分支。这样,在未来的 git pull 或 git push 操作中,你不需要指定远程仓库和分支的名字,Git 会自动知道你想要推送或拉取哪个远程分支。
例如,假设你有一个名为 feature-branch 的本地分支,并且你想要将它推送到名为 origin 的远程仓库的 feature-branch 分支。你可以使用以下命令:
bash
git push -u origin feature-branch
这条命令会做两件事:
将本地的 feature-branch 分支推送到远程仓库 origin 的 feature-branch 分支。
设置本地的 feature-branch 分支来跟踪远程仓库 origin 的 feature-branch 分支。
这样,在未来的操作中,你可以简单地使用 git pull 或 git push 来同步这个分支,而不需要指定远程仓库和分支的名字。
注意:一旦你设置了上游关系,你可以通过 git branch -vv 命令来查看所有的本地分支及其上游关系。