Git命令
目录
1. 安装完后配置一下环境变量
$ git config --global user.name “your name”
$ git config --global user.email “your email”
$ git config --list
2. 建立版本库
$ git init
$ git add *
$ git commit -m “info”
$ git status
3. 链接、退出远程版本库
gitServer: 服务器的用户名
ip: 服务器的ip地址:
$ ssh gitServer@ip
退出远程版本库
$ exit
4. 本地仓库位置建立远程服务器别名
$ git remote add [远程仓库别名] gitServer@ip:[仓库路径]
$ git remote -v
$ git push master
$ git clone gitServer@ip:[仓库目录文件]
5. 生成公私钥
$ssh-keygen.exe -t rsa -P ‘’
6. 为版本打标签
$ git tag -a v1.0 “tag info”
$ git tag
$ git show v1.0
7. 将标签推送到服务器
$ git push [远程仓库别名] v1.0
8. 删除标签
$ git tag -d v1.0
9. 查看⼯作区和版本库⾥⾯最新版本的区别
$ git diff HEAD - - [文件名]
10. ⽤命令git reset HEAD file把暂存区的修改撤销掉(unstage),重新放回⼯作区
$git reset HEAD [文件名]
#回退到上⼀个版本
$git reset --hard HEAD^
11. 从版本库中删除文件
$ git rm [文件名]
12. git reflog⽤来记录你的每⼀次命令:
$ git reflog
#HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使⽤命
$ git reset --hard commit_id
$ git reset --hard commit_id
13. 创建dev分⽀,然后切换到dev分⽀:
$ git checkout -b dev
#Switched to a new branch 'dev'
⽤git branch命令查看当前分⽀:
$ git branch
*dev
master
git branch命令会列出所有分⽀,当前分⽀前⾯会标⼀个*号。 然后,我们就可以在dev分⽀上正常提交,⽐如对readme.txt做个修改,加上⼀⾏: Creating a new branch is quick. 然后提交:
$ git add readme.txt
$ git commit -m "branch test"
# dev fec145a branch test 1 file changed, 1 insertion(+) 现在,dev分⽀的⼯作完成,我们就可以切换回master分⽀:
$ git checkout master
# Switched to branch 'master
现在,我们把dev分⽀的⼯作成果合并到master分⽀上
$ git merge dev
⼩结
Git⿎励⼤量使⽤分⽀:
查看分⽀:git branch
创建分⽀:git branch name
切换分⽀:git checkout name
创建+切换分⽀:git checkout -b name
合并某分⽀到当前分⽀:git merge name
删除分⽀:git branch -d name
14. stash,把当前工作分支“储藏”起来,等以后恢复现场后继续⼯作
git stash命令应用例子:
$ git stash :把当前所在的⼯作分支“储藏”起来,假设当前分支:dev
$ git stash save
# 保存工作目录和索引状态 WIP on drone_rotor: beb5e2f 修改语法错误:commit 172453b66e099290e6141e4550
或
$ git stash save “备注的内容” : 和git stash命令的区别,存储工作区有备注信息
$ git stash save "存储分支drone_rotor"
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’
2.现在修复bug
需要把“Git is free software …”改为“Git is a free software …”,然后 提交:
$ git add readme.txt
$ git commit -m “fix bug 101”
[issue-101 cc17032] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
3.修复完成后,切换到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).
4.接着回到原dev分⽀
$git checkout dev
Switched to branch ‘dev’
$ git status
#On branch dev nothing to commit (working directory clean)
⼯作区是干净的,刚才的⼯作现场存到哪去了?
5.⽤git stash list命令看看:
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
stash@{1}: WIP on drone_g209: 34736b3 g209测试版本
6.恢复原⼯作现场
Git把stash内容存在某个地⽅了,但是需要恢复⼀下,有两个办法:
⼀是⽤git stash apply恢复,但是恢复后,stash内容并不删除,你需要⽤git stash drop来删除; 另⼀种⽅式是⽤git stash pop,恢复的同时把stash内容也删了:
$ git stash pop
#On branch dev
#Changes to be committed:
#(use “git reset HEAD …” to unstage)
#new file: hello.py
#Changes not staged for commit:
#(use “git add …” to update what will be committed)
#(use “git checkout – …” to discard changes in working directory) #
#modified: readme.txt
#Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
再⽤git stash list查看,就看不到任何stash内容了:
git stash相关命令:
$ git stash save “备注的内容”
$ git stash list :列出stash的所有记录
stash@{0}: On drone_rotor: drone_rotor add pts to frame id
$ git stash clear:删除stash的所有记录
$ git stash pop:应用最近一次的stash,随后删除该记录
$ git stash apply:应用最近一次的stash
$ git stash drop:删除最近的一次stash
当有多条stash,可以指定操作stash,首先使用stash list列出所有记录:
$ git stash list
stash@{0}: On drone_rotor: drone_rotor add pts to frame id
stash@{1}: On drone_rotor: drone_rotor add pts to frame id
stash@{2}: WIP on drone_rotor: beb5e2f 修改语法错误:commit 172453b66e099290e6141e45505fc3090e5d860f
应用第二条记录:
$ git stash apply [email protected]{1}
pop,drop同理…
git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存储,后面加stash id,比如第二个 git stash show stash@{1},完整的差异可以使用git stash show -p。
15. 统计文件的改动
git diff < local branch > < remote >/< remote branch >
$ git diff --stat master origin/master
16. 创建远程分支:
查看所有远程分支:git branch -rv
创建本地分支同时迁出:git checkout -b + 本地分支名
$ git checkout -b devA
本地分支推送到服务器上并创建远程分支:git push --set-upstream origin + 远程分支名(建议设置的远程分支名与本地分支同名)
17. 搭建git服务器:
一台可以使用 SSH 连接的服务器,搭建 Git 服务将会非常简单。首先我们要确保服务器上运行着 SSH 服务(sshd),大多数 Linux 服务器版本都默认包含了该服务,如果没有,可以先安装 openssh-server。然后在服务器上创建 Git 远程版本库:
aneasystone@little-stone:~$ sudo mkdir -p /git/repo
aneasystone@little-stone:~$ sudo git init --bare /git/repo/test.git
已初始化空的 Git 仓库于 /git/repo/test.git/
我们在 /git/repo 目录通过 git init --bare 命令创建一个裸仓库(bare repository,即一个不包含当前工作目录的仓库),只要这一步,我们就可以开始使用了。接着我们在工作目录 clone 这个版本库:
aneasystone@little-stone:~$ cd ~/working/
aneasystone@little-stone:~/working$ git clone /git/repo/test.git
正克隆到 ‘test’…
warning: 您似乎克隆了一个空仓库。
完成
然后我们可以使用 pull、push 就像操作其他的版本库一样。
aneasystone@little-stone:~/working$ cd test/
aneasystone@little-stone:~/working/test$ touch 1
aneasystone@little-stone:~/working/test$ touch 2
aneasystone@little-stone:~/working/test$ git add .
aneasystone@little-stone:~/working/test$ git commit -m ‘first commit’
[master (根提交) 4983f84] first commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 1
create mode 100644 2
aneasystone@little-stone:~/working/test$ sudo git push
[sudo] aneasystone 的密码:
对象计数中: 3, 完成.
Delta compression using up to 8 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 205 bytes | 205.00 KiB/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To /git/repo/test.git
*[new branch] master -> master。