git 常用命令

发布于 2020-12-11 12:23:48 字数 7957 阅读 256 分类

 git 常用命令



 GIthub配置Git

SSHKEY 配置 详见:http://www.bjpowernode.com/tutorial_git/1859.html


  添加远程仓库地址

git remote add origin git@github.com:yourName/yourRepo.git

后面的yourName和yourRepo表示你再github的用户名和远程仓库地址


移除远程仓库地址,移除后可执行  remote add 添加新的仓库地址

git remote rm origin


初始化: git init 

对现有的某个项目开始用 Git 管理 

初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。


增加版本控制文件: git add 


如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交  

$ git add *.c
$ git add README
$ git commit -m 'initial project version'


克隆: git clone

如果想对某个开源项目出一份力,可以先把该项目的 Git 仓库复制一份出来,这就需要用到 git clone 命令 


查看状态变化: git status


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

$ git status
On branch master
nothing to commit, working directory clean

这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪的新文件,否则 Git 会在这里列出来。最后,该命令还显示了当前所在的分支是 master,这是默认的分支名称,实际是可以修改的 




 提交: git commit

确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit: 

$ git commit

这种方式会启动文本编辑器以便输入本次提交的说明。 

另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:

git commit -m "Story 182: Fix benchmarks for speed"

[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 3 insertions(+)
create mode 100644 README


新建分支: git branch  

建一个新的分支指针。比如新建一个  iss53  分支,可以使用 git branch 命令: 

 git branch iss53

这会在当前 commit 对象上新建一个分支指针 

 

运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作  


现在,你决定要修补问题追踪系统上的 #53 问题。要新建并切换到该分支,运行 git checkout 并加上 -b 参数:  

$ git checkout -b iss53
Switched to a new branch 'iss53'


这相当于执行下面这两条命令: 

 

$ git branch iss53

$ git checkout iss53




切换分支: git checkout  

要切换到其他分支,可以执行 git checkout 命令。我们现在转换到新建的 testing 分支: 

 git checkout testing



合并分支: git merge


有必要作些测试,确保修补是成功的,然后回到 master 分支并把它合并进来,然后发布到生产服务器。用 git merge 命令来进行合并:  

$ git checkout master
$ git merge iss53
Updating f42c576..3a0874c Fast-forward README | 1 - 1 file changed, 1 deletion(-)

请注意,合并时出现了“Fast forward”的提示。由于当前 master 分支所在的提交对象是要并入的 iss53 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。


回滚代码: git reset  

通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了 


这次主要使用git  reset。

$ git reset --hard HEAD^        回退到上个版本
$ git reset --hard commit_id    退到/进到 指定commit_id
$ git push --force   强制推送到远程,千万不要拉取,否则又会把最新提交拉下来


使用 git log --pretty=oneline 列表最近的版本

回滚到指定版本

git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96   



适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。  


 撤消指定版本: git revert


原理: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示: 

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交  



 

适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。 

举例:

现在库里面有三个文件:READ.md、text.txt、text2.txt。 

可以通过命令行查看(输入git log):

如图,最近的两个版本分别叫:“add text.txt”(即新增了文件text.txt)、“add text2.txt”(新增了文件text2.txt)。这个时候我们不需要text.txt这个文件了,那就是说不想要“add text.txt”那个版本的操作,那可以通过反做“add text.txt”这个版本来实现。

 

使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交: 

 git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861

注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。 

提交,使用“git commit -m 版本名”,如:

 git commit -m "revert add text.txt"

此时可以用“git log”查看本地的版本信息,可见多生成了一个新的版本,该版本反做了“add text.txt”版本,但是保留了“add text2.txt”版本: 

 

使用“git push”推上远程库: 

 此时查看仓库的文件,剩下两个:READ.md、text2.txt



   忽略某些文件


我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子: 

 $ cat .gitignore


*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 logtmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

  • 所有空行或者以注释符号  开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

.gitignore 文件的例子: 

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in


 配置代理


只对 github 的 clone 仓库配置:进入 github clone 仓库,运行

git config --local http.proxy 192.168.4.12:8080


之后就可以看到 .git/config 文件中多了最下面两行

[http]
proxy = 10.xx.xx.xx:8080

全局配置 代理,对所有的提交行为都生效

git config --global http.proxy 192.168.4.12:8080






收藏
分享
评论 0
关于作者

hujun5282

多读书 少写代码

标签云
统计信息

文章总数:188

累计访问: 次

今日访问: 次

在线人数: 人