git 实用命令

1.安装git

安装最新版本

#add-apt-repository ppa:git-core/ppa
#apt-get update
#apt-get install git
# git --version
git version 2.16.1已经2018年最新的了
安装完后配置姓名和邮箱
# git config --global user.name "xxx"
# git config --global user.email "xxx.xx"

2.创建版本库repository

# git init
已初始化空的 Git 仓库于 /home/xx/github/test/.git/

3.向仓库添加文件

# git add readme.txt
# git commit -m "add a readme file" //commit可以一次提交多个文件

4.查看仓库的状态

# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add <文件>..." 更新要提交的内容)
#   (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
#
#   修改:     readme.txt
如果文件被修改可以通过git diff查看被修改的内容
# git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 2ed92d3..8d64031 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 This is a test git
+I like git 

5.查看提交日志

# git log
commit d348a228ea9ecc20f7a19a72786b586aaf3b40c8 (HEAD -> master)
Date:   Thu Feb 1 14:21:31 2018 +0800

    add name

commit cb710a78ba786020ba5a67e1df2f09064e6a1846
Date:   Thu Feb 1 14:19:25 2018 +0800

    add my idea

commit 5abfd56c4af0b1c4beeeb501e58d44e774548dcd
Date:   Thu Feb 1 14:12:35 2018 +0800

    add a readme file
通过git show commit id可以查看版本修改的内容
# git show d348a228ea9ecc20f7a19a72786b586aaf3b40c8
在git中用HEAD表示当前版本HEAD^表示上一个版本

6.版本回退

# git reset --hard HEAD
HEAD 现在位于 d348a22 add name
# git reset --hard HEAD^
HEAD 现在位于 cb710a7 add my idea
# git reset --hard HEAD^
HEAD 现在位于 5abfd56 add a readme file

如果连续执行两次则回到最初的版本了
HEAD 现在位于 5abfd56 add a readme file
现在想回到add name的那个版本
git reset --hard d348a22
现在又回来了,又回到最新的变化了
# git reflog
记录了每一次commit id的变更
#git reset --hard commit_id 可以在所有的版本之间穿梭

7.git checkout

使用 “git checkout – <文件>…” 丢弃工作区的改动
回到最近一次git commit或者git add时的状态

8.删除文件

如果是用rm删除了文件想恢复用git checkout 即可
想真的删除git add /git commit
但是还可以通过# git reset --hard id回去
以可以通过# git rm test.txt删除test.txt
git rm test.txt
git commit -m ""
以可以通过# git rm test.txt删除test.txt

9.远程仓库

git是分布式版本控制系统,如果有一台机器有一个原始版本,别的机器可以“克隆”这个原始版本,没有主次之分
在服务器上创建一个空的仓库,有两种方式使用
一:从这个仓库克隆出新的仓库

git clone https://github.com/xxxx/Test.git

二:把一个已有的本地仓库与之关联,把本地仓库的内容推送到服务器仓库
在本地的仓库运行:关联一个远程库

# git remote add origin [email protected]:xxxshui/Test.git
已可以输入git remote add origin https://仓库的url地址 只是git@比https要快
如果出现fatal:remote origin already exists则执行git remote rm origin
把本地库所有的内容推送到远程上
# git push -u origin master //第一次推送master分支的所有内容
出现
Permission denied (publickey).
fatal: 无法读取远程仓库。
由于本地git仓库和github仓库之间的传输是通过ssh加密的,所以需要设置
创建ssh key
# ssh-keygen -t rsa -C "[email protected]"
生成:/root/.ssh/id_rsa id_rsa.pub
在github上打开Account settings SSH keys页面
在SSH keys Add new 里面填写任意title和刚生成的id_rsa.pub
然后再次执行
git push -u origin master
出现:! [rejected]        master -> master (non-fast-forward)
是因为github上的Readme.md文件不在本地仓库中
fix:
# git pull --rebase origin master
# git push -u origin master
push 成功
以后修改或增加内容之后直接git push即可

10.分支管理

分支用于多人协同开发,自已的模块不影响别人的开发,自已也可以每天提交
进度到自已的分支,开发完后,一次性合并到原来的分支上,安全且不影响别人工作
1)创建分支
git默认有一个主分支叫master分支,HEAD指向master,而master指向提交,HEAD
指向当前分支

# git checkout -b bshui
切换到一个新分支 'bshui'
查看当前分支,当前分支前面会标一个*号
# git branch
* bshui
  master
当切换到bshui分支后我们就可以对仓库里的内容进行修改了
# git reflog
253a4ea (HEAD -> bshui) HEAD@{0}: commit: add telephone
f0de74e (origin/master, master) HEAD@{1}: checkout: moving from master to bshui
HEAD指针指向了bshui分支
切回主分支:# git checkout master
当在bshui分支上增加或修改的文件不会出现在master分支上

2)合并分支
把bshui分支的工作成果合并到master分支上

# git merge bshui
更新 f0de74e..aade24f
Fast-forward
 a.txt      | 1 +
 readme.txt | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
合并后就可以把bshui分支给删掉
# git branch -d bshui
已删除分支 bshui(曾为 aade24f)。
-------------------------------
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
-------------------------------

3)冲突解决
当master分支和bshui分支都修改了同一个文件readme.txt并且都有提交修改
在合并的时候会出现冲突

# git merge bshui
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果。
我们查看readme.txt的内容
# cat readme.txt 
This is a test git
I like git 
My name is DaemonShui
my telephone is 135xxxxx
<<<<<<< HEAD
haoao
=======
hello
>>>>>>> bshui
手动修改后再次提交就合并完成了
git add readme.txt
git commit -m "dd"

git log --graph可以查看分支合并图
注意:在合并分支时,用--no-ff参数,表示禁用fast forward
默认的合并是用fast forward模式,这样就看不出来合并的踪迹
git merge --no-ff -m "merge with no-ff" bshui 有提次参数
master分支是非常稳定的,用来发布新版本
平时在dev分支上做事,不稳定,当称定后合并到master分支发布新版本

4)多人协作开发
查看远程库信息,使用git remote -v 会显示可fetch,push的路径
origin https://github.com/Kylinshui/test.git (fetch)
origin https://github.com/Kylinshui/test.git (push)
从本地推送分支,使用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,如果有冲突,要先处理冲突

11.标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
1)创建标签
在需要打标签的分支上

git tag v1.0就打上了一个标签

查看所有的标签

git tag

v1.0
2)删除标签
如果标签打错了可以删除
git tag -d v1.0
3)推送标签到远程
git push origin v1.0

参考:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章