#git工作流程

常用代码总览

也可直接进行官网git指南查看 链接如下:
https://git-scm.com/book/zh/v2?tdsourcetag=s_pcqq_aiomsg
中文版:https://git-scm.com/book/zh/v2

git init		#创建新的 Git 仓库
git status      #命令用于查看项目的当前状态。
git add test    #添加test文档进入缓存区		
git status      #命令来添加文件.
git commit -m "注释"   #将缓存区内容添加到仓库中
git status
history			# 查看日志
git log        # 查看 提交的历史 , 之前git commit -m "注释" 的 注释 内容这里就能很快的帮我们早找提交的版本
      		   #方便进行版本替换,恢复版本等
git reflog		#回退版本后,又想回到之前的版本,log里面也没有记录的时候用reflog进行查看之前的指令,查找版本
git checkout --版本号      #恢复版本 
git diff (HEAD 或者  cached(版本id)或者  master )      #查看文件变动
git checkout -b dev #新建一个名为dev的分支,并切到分支dev,
git checkout master #则为转到分支名为master
git merge dev   #将dev的分支和master分支 进行合并
git branch -a    #查看分支
git pull        #拉取更新,用于下载别人的文件后,当别人更新后,自己也调用git pull  更新
git push origin (分支的名字)   #推送到远程仓库的分支名

在这里插入图片描述
1.设置 git 帮我们管理
用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、
任何目录中这么做,完全是本地化的working dir。

#进入需要管理的文件后输入
zhao@ubuntu:~/git$ git init
#然后 ls -a 查看文件,
zhao@ubuntu:~/git$ ls -a  
.  ..  .git    #隐藏文件

2.文件编写
使用 git add 命令将想要快照的内容写入缓存区index,
而执行 git commit 将缓存区内容添加到仓库中head。

               #用vim编写一个文件
zhao@ubuntu:~/git$ vim test                         #test文件名任意
             #然后用 git add test  添加到缓存区
zhao@ubuntu:~/git$ git add test
			#git status进入缓存区查看
			
zhao@ubuntu:~/git$ git status
#(输出):
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   test1


如果git没有账号,会出现下面这样的情况
git commit -m 之后如果git没有账号,会出现下面这样的情况,

*** Please tell me who you are.              #请告诉我你是谁。

Run												#运行

  git config --global user.email "[email protected]"    
 								# git config——全局用户。你的邮件“[email protected]”  设置你的email
  git config --global user.name "Your Name"
							  #  git config——全局用户。  设置你的用户名
to set your account's default identity.   #设置帐户的默认标识。
Omit --global to set the identity only in this repository.
										#省略——全局设置,仅在此存储库中设置标识。
	

按照提示进行编辑就行了
u:~/git$  git config --global user.email '[email protected]'    #随便设置
u:~/git$  git config --global user.name 'test'		  #随便设置

然后再 git commit -m "标记的内容。。版本号"

3.查看 提交的历史
#git log
查看 提交的历史 , 之前git commit -m “注释” 的 注释 内容这里就能很快的帮我们早找提交的版本,
方便进行版本替换,恢复版本等

zhao@ubuntu:~/git$ git log
(系统输出:)
commit dc0e56113ea18565a7ba049cd9e5d1f329daabc8 (HEAD -> master)	#版本id 更新 恢复 对比都用得到
Author: test <[email protected]>				
Date:   Thu Nov 15 18:29:48 2018 -0800

    第二次

commit 4b84a617552fec83a8690957a52e1c218d633fff
Author: test <[email protected]>										# 用户名 和 email  之前设置的
Date:   Thu Nov 15 18:23:33 2018 -0800						#  时间

    第一次
zhao@ubuntu:~/git$ 

4.查看缓存区index 的改动,

执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
尚未缓存的改动:git diff 即工作区working dir 的 改动,比如删除文件,创建文件
查看已缓存的改动: git diff cached
#参数 cached 为git log查询历史的 commit dc0e56113ea18565a7ba049cd9e5d1f329daabc8 (HEAD -> master)
#里面的 dc0e56113ea18565a7ba049cd9e5d1f329daabc8地址,进行查看制定版本 的添加更改的内容。
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

zhao@ubuntu:~/git$ git diff 4b84a617552fec83a8690957a52e1c218d633fff  
											 #上面根据版本id进行查看
(系统输出:)
diff --git a/test b/test					
index 9b3b33b..c716e84 100644
--- a/test
+++ b/test
@@ -1,2 +1,30 @@			
 print("hello world")							#这次更新版本的内容有那些
 print("asdasdasadsdad"")
+sdddddddddddddddddddd
+asddddddddd
+asdddddddddddddddd
+asdasdasd
+
+aaaaaaaa
diff --git a/test.py b/test.py
deleted file mode 100644
index 3cf5162..0000000

在这里插入图片描述
5.创建分支
git checckout -b (分支的名字)

zhao@ubuntu:~/git$ git checkout -b dev  #新建一个名为dev的分支
(系统输出:)
D	test.py
Switched to a new branch 'dev'       #已经切换到分支 dev
zhao@ubuntu:~/git$ 

6.分支合并

zhao@ubuntu:~/git$ git checkout dev    #切换到分支 dev
 (系统输出:)
M	test
D	test.py
Switched to branch 'dev'
zhao@ubuntu:~/git$ ls					#查看列表			
test  test1			
zhao@ubuntu:~/git$ vim test				#vim 编辑 test文本

#(编辑内容,下文随意编辑的)
print("hello world")
print("asdasdasadsdad"")
zzzzzzzzzzzzzzzzzzzzzzz
xxxxxxxxxxxxxxxxxxxxxxx
cccccccccccccccccccccc
vvvvvvvvvvvvvvvvvvvvvv

zhao@ubuntu:~/git$ git status			#查看工作区
(系统输出:)
On branch dev
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test

zhao@ubuntu:~/git$ git commit -am "测试1"     #git commit -m "注释"   将缓存区内容添加到仓库中
(系统输出:)									#git add test	添加到缓存区  
[dev f090128] 测试1							#git commit -am "测试1"  为前面两个连用
 1 file changed, 1 insertion(+), 1 deletion(-)

zhao@ubuntu:~/git$ git checkout master			#切换分支为master
Switched to branch 'master'
zhao@ubuntu:~/git$ ls						#查看列表
test  test1
zhao@ubuntu:~/git$ less test				#查看文本test   也可以用 vim
#(文本内容)
print("hello world")
print("asdasdasadsdad"")
zzzzzzzzzzzzzzzzzzzzzzz
xxxxxxxxxxxxxxxxxxxxxxx
cccccccccccccccccccccc						#和dev分支中的少一排vvvvvvvv

zhao@ubuntu:~/git$ git merge dev			#将dev分支和master分支进行合并
Updating a9af502..f090128
Fast-forward
 test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
zhao@ubuntu:~/git$ less test				#查看master分支中的test
#(文本内容)
print("hello world")
print("asdasdasadsdad"")
zzzzzzzzzzzzzzzzzzzzzzz
xxxxxxxxxxxxxxxxxxxxxxx
cccccccccccccccccccccc
vvvvvvvvvvvvvvvvvvvvvv

上面的文dev 更改版本后,master没进行更改,然后在合并,
还有一种为两个分支都修改了,最后合并出现版本冲突。

zhao@ubuntu:~/git$ git merge dev			#合并
(系统输出:)	
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
	#自动合并testCONFLICT(内容):testAutomatic Merge中的Merge conflict失败:修复冲突,然后提交结果。
	
zhao@ubuntu:~/git$ git status
(系统输出:)	
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

	both modified:   test

zhao@ubuntu:~/git$ vim test  
print("hello world")
print("asdasdasadsdad"")
zzzzzzzzzzzzzzzzzzzzzzz
xxxxxxxxxxxxxxxxxxxxxxx
cccccccccccccccccccccc
vvvvvvvvvvvvvvvvvvvvvv
<<<<<<< HEAD
nnnnnnnnnnnnnnnnnnnn			#master 分支修改的
=======
bbbbbbbbbbbbbbbbbbbbb		  #dev 分支下修改的

>>>>>>> dev
#这里进行修改,修改后,git commit -am "解决"  就行了 

7.推送到远程仓库
1.新建项目,这里用的是码云Gitee
在这里插入图片描述
这里建议 不要 打钩 使用Readme文件初始化这个项目。如果两次推送的版本不连续会出现错误,
比如在公司推得3版本,回到家在推5版本

在这里插入图片描述
复制地址 https:// 你创建的项目地址
然后,我们在本地库上使用命令git remote add把它和码云的远程库关联:

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

之后,就可以正常地用git push和git pull推送了!

如果在使用命令git remote add时报错:

git remote add origin git@gitee.com:liaoxuefeng/learngit.git
fatal: remote origin already exists.

这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:


git remote -v
origin    git@github.com:michaelliao/learngit.git (fetch)
origin    git@github.com:michaelliao/learngit.git (push)

可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub。

我们可以删除已有的GitHub远程库:

git remote rm origin

再关联码云的远程库(注意路径中需要填写正确的用户名):

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

此时,我们再查看远程库信息:

git remote -v
origin    git@gitee.com:liaoxuefeng/learngit.git (fetch)
origin    git@gitee.com:liaoxuefeng/learngit.git (push)

现在可以看到,origin已经被关联到码云的远程库了。通过git push命令就可以把本地库推送到Gitee上。

有的小伙伴又要问了,一个本地库能不能既关联GitHub,又关联码云呢?

答案是肯定的,因为git本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。

使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:

git remote rm origin

然后,先关联GitHub的远程库:

git remote add github git@github.com:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。

接着,再关联码云的远程库:

git remote add gitee [email protected]:liaoxuefeng/learngit.git
同样注意,远程库的名称叫gitee,不叫origin。

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

git push github master

如果要推送到码云,使用命令:

git push gitee master
这样一来,我们的本地库就可以同时与多个远程库互相同步:

┌─────────┐ ┌─────────┐
│ GitHub │ │ Gitee │
└─────────┘ └─────────┘
▲ ▲
└─────┬─────┘

┌─────────────┐
│ Local Repo │
└─────────────┘
参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00150154460073692d151e784de4d718c67ce836f72c7c4000

注意

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

$ cat .gitignore
    *.[oa]
    *~

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

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

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。

我们再看一个 .gitignore 文件的例子:

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

猜你喜欢

转载自blog.csdn.net/weixin_43097301/article/details/84139819