Windows下 Git 常用操作记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vincent95/article/details/78451905

1、windows客户端安装

下载地址:http://msysgit.github.io/
全部默认安装即可。
安装完成后,会在系统右键菜单中集成Git Bash Here等菜单选项,说明安装成功。

2、配置git用户名及邮箱地址

这个就相当于一个用户的标识信息,表示创建仓库的所有者信息。

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

3、创建版本库

新建一个空目录作为你的仓库。比如:gitwork
在目录中右键选择Git Bash Here,输入git init,初始化当前目录作为你的仓库。

$ git init
Initialized empty Git repository in F:/gitwork/.git/

操作完成后,会在当前目录下创建一个.git的文件夹,默认是隐藏的,不要手动操作这个目录下的任何文件,它是git用来跟踪版本库的。

3.1、 添加文件到版本库

使用git add readme.txt将工作区的文件readme.txt(文件必须存在)添加到暂存区(staged状态,commit前必须的操作,否则无法commit。git提交(commit)的时候是将暂存区的文件全部一次性提交到仓库永久保存的,即一个新的主分支产生了)

$ git add readme.txt

commit 之前可以使用git diff readme.txt查看当前工作区副本与暂存区之间的差别

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index e69de29..3641e2c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -0,0 +1,3 @@
+test
+hello world

确定后,使用git commit -m "注释"提交到版本库

$ git commit -m "create new file readme.txt"
[master c773499] none
1 file changed, 3 insertions(+)

使用git status查看当前版本库工作目录中文件的状态。
文件状态有已提交(committed),已修改(modified),已暂存(staged),还有没有版本控制的(untracked)。

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

平时开发的时候,肯定有很多临时文件(文件夹)是不需要提交到版本库的。但每次git status时会显示很多Untracked files,git提供一种方案来忽略显示这些文件,就是在目录中创建一个.gitignore文件,将你不想显示的文件类型都罗列出来。git已经提供了常用类型的配置文件,你不用自己创建,只需下载后手动增加修改即可,具体参考https://github.com/github/gitignore

Remarks:commit 前必须先 add ,这样 git 才知道要 commit 什么。

4、查看提交日志

使用git log可以查看提交的详细日志,如果嫌太繁杂,可以使用git log --pretty=oneline显示精简的日志。

$ git log --pretty=oneline
c77349985415c4eaba4ed4a5828246d2b228e471 (HEAD -> master) none
a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn modify readme.txt
ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt

前面的一大串数字字母表示提交的各个版本标识,是通过SHA1计算出来的。
括号里的HEAD表示这是最新的提交版本。

5、版本回退

现在最新提交的版本是c77349(上面日志中显示的版本标识的前6位),如果想回退到注释为modify readme.txt的版本。使用git reset --hard 需要回退的版本标识

$ git reset --hard a7746f
HEAD is now at a7746f modify readme.txt

这样就回退到指定的版本了。
命令中的版本标识可以任意取前几位,但一定要唯一确定。
再使用git log --pretty=oneline查看一下提交日志。

$ git log --pretty=oneline
a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn (HEAD -> master) modify readme.txt
ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt

发现没,已经看不到注释为none这条记录了,最新的版本也跟着变成了modify readme.txt这个版本了。(与人类的观念一致)

如此,又有一个问题,你可能又后悔了,想重新恢复到注释为none的版本,当然你可以在Git Bash窗口记录中找到对应的版本id来恢复。

$ git reset --hard c773499

但是,可能你想这么做的时候已经是第二天了,电脑都关机了,哪里还知道这个id。没关系,
git也提供了相应的功能。输入git reflog即可。

$ git reflog
c773499 (HEAD -> master) HEAD@{0}: reset: moving to a7746fd
c773499 (HEAD -> master) HEAD@{7}: commit: none
a7746fd (HEAD -> master) HEAD@{6}: commit: modify readme.txt
ddf00b5 HEAD@{7}: commit (initial): create new file readme.txt

它记录了所有的commit操作信息,当然包括对应的版本的id了,这下终于没有后顾之忧了。

6、撤销工作区的修改

假如你又对 readme.txt 文件做了些修改,突然发现这些修改没什么意义,想撤销你的修改,回到没有修改以前的状态。可以使用git checkout -- 文件名

$ git checkout -- readme.txt

如果之前没有将此文件添加到暂存区(add)的话,此文件就会恢复到 HEAD 版本库(最新的版本库)的状态。
如果之前已经添加到暂存区还没有提交的话,此文件就会恢复到添加到暂存区时的状态。

如果已经添加到暂存区,可是还是想恢复到提交 HEAD 版本时的状态的话,可以使用命令
git reset HEAD 文件名,将某个文件单独回退到最新提交的状态(HEAD 表示最新提交的那个版本)。同时,这个命令会恢复暂存区中此文件的状态。

$ git reset HEAD readme.txt

7、删除文件并提交及误删处理

如果想从版本库中删除 readme.txt 文件,先在工作目录中删除此文件,这样 git 就会检测到,然后输入命令git rm 文件名,git 会从暂存区中删除此文件,然后正常commit提交即可。

$ git rm readme.txt
git commit -m "delete readme.txt"
[master c773499] remove readme.txt
1 file changed, 1 deletion(-)
delete mode 100644 readme.txt

这样文件就从版本库中真正的删除了。

如果是本地文件被误删了,可以使用命令git checkout -- 文件名恢复到最近一次addcommit操作的状态。

8、远程仓库操作

以上介绍的所有操作都是针对本地仓库。git 还可以对远程仓库进行克隆(将远程仓库的下载一份到本地,作为一个独立的分支),推送(将自己的修改提交到远程仓库)以及拉取(检出别人对仓库做的提交)。
下面分步介绍:

8.1、设置SSH Key(以 github 为例)

为了使与远程仓库通信更加安全,git 使用了 SSH 对通信加密。
所以需要生成 SSH 通信密钥。

  1. Git Bash中输入命令ssh-keygen -t rsa -C "您的邮箱地址",一路回车,忽略存储路径和密码的设置。你就会在用户目录C:\Users\用户名\.ssh中发现两个文件,id_rsa(私钥)和 id_rsa.pub(公钥)。
  2. 私钥文件不要动。在 github.com 中依次打开 Settings-SSH and GPG keys-SSH keys,单机New SSH Key,在Title中输入提示信息,将id_rsa.pub的内容复制到Key中,保存。

8.2、克隆远程仓库

git是分布式版本控制系统,我们可以建立一个公开的仓库,可以让所有人都能从这个仓库克隆作为他们自己的分支,来帮助开源项目维护。
还是以github为例,首先在github上创建一个项目,叫gittest
我们打开Git Bash,将目录切换到gitwork,输入命令git clone 远程仓库地址

$ git clone [email protected]:***/gittest.git
Cloning into 'gittest'...
remote: Counting objects: 4, done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 4
Receiving objects: 100% (4/4), done.
Checking connectivity... done.

远程仓库地址可以从github上的gittest仓库信息中看到。这样在github上创建的远程仓库就被克隆到本地了,在当前目录中可以看到多了一个gittest目录,仓库中的所有文件也同步到本地了。

  • 查看远程仓库信息
    git remote -v

  • 推送分支
    git push origin master

    origin 为远程仓库在本地默认的名字(就是对应远程仓库的地址),master 为本地分支名,此处为主分支(也是推送到远程仓库的主分支上)。一般情况需保持主分支与远程仓库同步就行。
    如果多人都在同一个分支下工作的话,当一个人push后,另外一个人再push的话就会失败,必须先将分支上最新的代码pull下来,解决冲突后,再push。

  • 抓取分支
    git pull

    pull之前必须设置本地分支与远程分支的对应关系,可以使用git branch --set-upstream dev origin/dev来将本地分支dev与远程仓库
    分支dev的关系关联起来。

8.3、将本地仓库关联到远程仓库

  • 我们还是先要在github上创建一个新的仓库,使用命令git remote add origin 新仓库地址,就将本地仓库与远程仓库之间建立了关联。

    git remote add origin [email protected]:***/gittest.git
    

    origin 为远程仓库在本地默认的名字。

  • 使用git branch --set-upstream master origin/master,将本地主分支与远程仓库主分支建立远程关联。

  • 使用git pull拉取远程仓库代码。

  • 使用git push来推送本地代码到远程仓库。

    git push origin master
    

    最后的master表示要推送的本地分支名。

8.4、同步github账户fork的代码

github中曾经fork的代码不会自动与原作者保持同步。需要手动操作。
假设你的github中fork的仓库地址为:[email protected]:yourname/yourfork.git
原始作者的仓库地址为:[email protected]:authorname/projectname.git

  • 关联原始作者的仓库

    git remote add authorname [email protected]:authorname/projectname.git
    
  • 抓取原始作者仓库修改的文件

    git fetch authorname
    
  • 切换到本地主分支

    git checkout master
    
  • 合并远程的原始作者主分支

    git merge authorname/master
    
  • 推送到自己的远程仓库

    git push origin master
    

9、分支操作

平时开发的时候,新开一个项目,但又不想把还没完成的代码提交到主分支上。这时我们可以创建一个新的分支,来提交我们的代码,这样不用担心代码因未提交可能丢失,也不会影响主分支的功能。等所有功能完成后,还可将新建的分支代码合并到主分支上,并删除新建的分支。

  1. 新建分支 dev
    git branch dev

  2. 切换分支(切换到dev分支)
    git checkout dev

    1、2 两步可用git checkout -b dev直接达到。

    如果需要将远程的 dev分支同步到本地 dev分支,需要先使用
    git branch --set-upstream-to=origin/dev dev设置关联,然后使用
    git pull拉取就可以了。

  3. 查看当前分支
    git branch

    从远程仓库克隆时,默认在本地只能看到主分支,使用git checkout -b dev origin/dev创建即可。

    使用git branch -r可以同时查看远程的所有分支。

    使用git branch -a可以同时查看本地和远程的所有分支。

    使用git push origin dev就会自动将本地 dev分支推送到远程的 dev分支上。

  4. 合并分支(将dev分支合并到当前分支)
    git merge dev

  5. 删除分支
    git branch -d dev

    git branch -d dev是删除本地分支。

    如果要删除远程分支的话,使用
    git branch -r -d origin/dev
    git push origin :dev

如果新建分支后,主分支一直没有提交新的操作,那么合并的时候,基本没有什么顾虑。但是新建分支后,主分支上也在继续开发,那么合并分支的时候,如果两个分支都对同一个文件的相同位置做了不同的修改,就会提示产生冲突,产生冲突后,可以用git status查看冲突文件,git会在文件中以<<<<<<<=======>>>>>>>来标注不同分支修改的内容,我们必须手动去掉这些标注来解决冲突后再提交就可以了。冲突解决后才能删除新建的分支。

  • 查看分支合并图
    git log --graph
    git log --graph --pretty=oneline --abbrev-commit

如果当前代码已经写了一点,但不想提交到分支上,临时想切换到另一个分支分析点东西,可以使用git stash储存工作现场。

  • 保存工作现场
    git stash
  • 查看保存的工作现场
    git stash list
  • 恢复工作现场(会自动删除保存的工作现场记录)
    git stash pop
  • 恢复指定的工作现场(不会自动删除保存的工作现场记录)
    git stash apply stash@{0}
  • 删除保存的工作现场记录
    git stash drop

10、标签操作

标签相当于仓库的一个快照。不过标签是针对当前分支的快照。

  • 创建标签
    git tag v1.0 (v1.0为标签名)

    标签默认是打在最新的提交的那个时间点的,如果在以前的某次提交忘打的话,可以使用git log --pretty=oneline --abbrev-commit查看那次的提交标识,使用git tag v1.0 3628164(3628164为版本标识)。
    可以使用-a 指定标签名,-m 指定标签说明文字。
    git tag -a v0.1 -m "version 0.1 released" 3628164,这样的标签称为“附注标签“,与“轻量标签”对应。

  • 查看所有标签
    git tag

  • 查看某个标签信息
    git show v1.0

  • 删除标签
    git tag -d v0.1

  • 切换到标签状态
    git checkout v0.1

  • 推送标签
    通常git push的时候是不会将标签也提交到git服务器上的,需要另外手动操作。
    git push origin v0.1
    如果使用的github,可以去网站看看有没有推送成功。

    使用git push origin –tags可以将本地所有未提交的标签一次性提交到git服务器。

  • 删除远程服务器标签
    先删除本地标签:git tag -d v0.1
    再提交到远程:git push origin :refs/tags/v0.9:refs/tags/为固定格式,后面跟标签名。

11、界面操作软件

如果使用过TortoiseSVN,比较习惯界面操作的话,可以使用TortoiseGit,TortoiseGit是开源的客户端,只支持Windows。
TortoiseGit 只是一个界面程序壳,运行必须依赖核心Git客户端,比如msysgit。
下载地址:https://download.tortoisegit.org/tgit/

12、设置git代理

fatal: unable to access 'https://***.git': Failed to connect to chromium.googlesource.com port 443: Timed out
如果 url被墙的话,就需要设置 git代理了。

  • 设置 git代理
    git config --global http.proxy localhost:1080
    git config --global https.proxy localhost:1080
    localhost:1080为代理服务器 ip、端口。
    如果需要用户名和密码:
    git config –global http.proxy http://user:password@localhost:8080
    git config –global http.proxy https://user:password@localhost:8080

  • 取消 git代理
    git config --global --unset http.proxy
    git config --global --unset https.proxy

猜你喜欢

转载自blog.csdn.net/Vincent95/article/details/78451905
今日推荐