(轉)初學Git及簡單搭建git服務器和客戶端


終於搞定,mac自己作為git服務器,mac也是客戶端,如何免登

升級了mac系統打10.14后,公鑰認證又不生效了,修改/etc/ssh/sshd_config文件如下,即可

# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

LoginGraceTime 2m
PermitRootLogin yes
StrictModes no
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
RSAAuthentication yes
PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile	.ssh/authorized_keys

AuthorizedPrincipalsFile none

AuthorizedKeysCommand none
AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# pass locale information
AcceptEnv LANG LC_*

# no default banner path
#Banner none

# override default of no subsystems
Subsystem	sftp	/usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

測試登陸方式

ssh -v root@192.168.1.111 

 

======

2019年12月24日更新:

git要免登的話還得做如下處理:

Mac里實際是

/Users/git/.ssh/authorized_keys

所以必須把id_rsa.pub黏貼到/Users/git/.ssh/authorized_keys里才能免登!!!!

 

 

======

從另外一個linux服務器的上傳公鑰得到提示

ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168.1.111

公鑰是傳到了mac的

/Users/git/.ssh/authorized_keys

所以其他的各個客戶端的包括(mac自己)的pub公鑰,都要復制到這個文件里,就可以免密碼登陸了

 

注意mac里的sourcetree是用的非root賬號,所以得在 非root賬號下生成一個公鑰,然后黏貼到服務器的authorized_keys文件里,這樣sourcetree才能免密登陸

==========================================

 

 

 

(原文)http://blog.51cto.com/xinsir/2060332
初識Git

Git是什么?

  Git是目前世界上最先進的分布式版本控制系統。

SVN與Git的最主要的區別?

  SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而干活的時候,用的都是自己的電腦,所以首先要從中央服務器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就納悶了。
  Git是分布式版本控制系統,那么它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

基本概念

工作區:就是你在電腦里能看到的目錄。
暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。工作區的文件先被增加到這個區域里,再從這個區域提交到版本庫。 版本庫:工作區有一個隱藏目錄.git,這個不是工作區,而是Git的版本庫。

在linux上搭建git服務器

linux系統環境:

[root@localhost ~]# cat /etc/issue CentOS release 6.9 (Final) Kernel \r on an \m

linux上作為我的git服務器

安裝git

我這里使用的yum安裝
[root@localhost ~]# yum install git
也可以使用源碼安裝,需要安裝很多依賴包

yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel

下載地址 https://github.com/git/git/releases

    $ tar -zxf git-2.0.0.tar.gz
 $ cd git-2.0.0  $ make configure  $ ./configure --prefix=/usr  $ make all doc info  $ sudo make install install-doc install-html install-info

獲取git版本,安裝成功

[root@localhost ~]# git version #git版本 git version 1.7.1

git安裝好后,創建 git 用戶,用來管理 Git 服務,並為 git 用戶設置密碼

[root@localhost ~]# useradd git [root@localhost ~]# passwd git

禁止 git 用戶 ssh 登錄服務器,修改/etc/passwd文件

比如原先是

git:x:1002:1002::/home/git:/usr/bin/git

需要改成
git:x:1002:1002::/home/git:/usr/bin/git-shell

 

 

創建版本庫

在Disk文件夾下新建了一個文件夾名為repository
[root@localhost Disk]# mkdir repository
將repository初始化為git倉庫
[root@localhost repository]# git init
該命令將創建一個名為 .git 的子目錄,是隱藏的,這個子目錄含有你初始化的 Git 倉庫中所有的必須文件,這些文件是 Git 倉庫的骨干。

[root@localhost repository]# ll -a drwxr-xr-x. 8 root root 4096 1月 8 17:35 .git

我從網上查到,如果初始化遠程倉庫的話,要使用這個命令:git init --bare repository.git
這樣初始化的倉庫並沒有.git目錄,只有.git目錄下的文件。
不使用--bare選項時,就會生成.git目錄以及其下的版本歷史記錄文件,這些版本歷史記錄文件就存放在.git目錄下;而使用--bare選項時,不再生成.git目錄,而是只生成.git目錄下面的版本歷史記錄文件,這些版本歷史記錄文件也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面
用"git init"初始化的版本庫用戶也可以在該目錄下執行所有git方面的操作。但別的用戶在將更新push上來的時候容易出現沖突。
解決辦法就是使用”git init --bare”方法創建一個所謂的裸倉庫,之所以叫裸倉庫是因為這個倉庫只保存git歷史提交的版本信息,而不允許用戶在上面進行各種git操作,如果你硬要操作的話,只會得到下面的錯誤(”This operation must be run in a work tree”),這個就是最好把遠端倉庫初始化成bare倉庫的原因。

說白了,就是會創建一個裸倉庫,裸倉庫沒有工作區,服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。
然后,把倉庫所屬用戶改為git:
[root@localhost Disk]# chown -R git:git repository.git

在windows上安裝git作為客戶端

安裝git

下載地址:http://gitforwindows.org/
直接安裝即可,安裝后在開始菜單里會有git bash、git GUI和git CMD
初學Git及簡單搭建git服務器和客戶端

設置用戶名、郵箱

因為Git是分布式版本控制系統,所以需要填寫用戶名和郵箱作為一個標識。
每一個 Git 的提交都會使用這些信息,並且它會寫入到你的每一次提交中,不可更改。如果使用了 --global 選項,那么該命令只需要運行一次,因為之后無論你在該系統上做任何事情, Git 都會使用那些信息。 當你想針對特定項目使用不同的用戶名稱與郵件地址時,可以在那個項目目錄下運行沒有 --global 選項的命令來配置。
打開git bash
初學Git及簡單搭建git服務器和客戶端
如果想要檢查你的配置,可以使用 git config --list 命令來列出所有 Git 當時能找到的配置。

[root@localhost ~]# git config --list user.name=xxx user.email=xxx@qq.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true ......

將linux服務端和windows客戶端關聯起來

客戶端生成ssh私鑰和公鑰

想要他們連接的話要創建證書登錄
收集所有需要登錄的用戶的公鑰,公鑰位於id_rsa.pub文件中,把我們的公鑰導入到/home/git/.ssh/authorized_keys文件里,一行一個。 
打開windows的git bash,輸入ssh-keygen -t rsa -C “郵箱”,生成ssh私鑰和公鑰
初學Git及簡單搭建git服務器和客戶端
此時 C:\Users\用戶名.ssh 下會多出兩個文件 id_rsa 和 id_rsa.pub
id_rsa 是私鑰
id_rsa.pub 是公鑰

服務器端 Git 打開 RSA 認證

進入 /etc/ssh 目錄,編輯 sshd_config,打開以下三個配置的注釋:

RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

保存並重啟 sshd 服務:
[root@localhost ssh]# /etc/rc.d/init.d/sshd restart

centos7用systemctl restart sshd.service

 

 

將客戶端公鑰加到服務器

由 AuthorizedKeysFile 得知公鑰的存放路徑是 .ssh/authorized_keys,實際上是 $Home/.ssh/authorized_keys,由於管理 Git 服務的用戶是 git,所以實際存放公鑰的路徑是 /home/git/.ssh/authorized_keys
在 /home/git/ 下創建目錄 .ssh

[root@localhost git]# pwd /home/git [root@localhost git]# mkdir .ssh [root@localhost git]# ls -a . .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla .ssh

然后把 .ssh 文件夾的 owner 修改為 git,為.ssh和authorized_keys修改權限

[root@localhost git]# chown -R git:git .ssh [root@localhost git]# chmod 700 .ssh [root@localhost git]# touch .ssh/authorized_keys [root@localhost git]#chmod 600 .ssh/authorized_keys

將客戶端公鑰id_rsa.pub文件的內容寫到服務器端 /home/git/.ssh/authorized_keys 文件里

在客戶端clone遠程倉庫

將服務器上的/opt/repository/gittest.git庫克隆到本地 git clone [URL]git是用戶名@服務器地址:倉庫路徑
初學Git及簡單搭建git服務器和客戶端
可以看到本地上的服務器倉庫了
初學Git及簡單搭建git服務器和客戶端

在客戶端遠程倉庫並提交代碼

你已經在本地創建了一個Git倉庫后,又想在服務器創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步
先在linux本地init一個倉庫,在里面隨意編輯一個文件,在本地提交,然后連接遠程倉庫,將文件push到服務器上,由於遠程倉庫是沒有工作目錄的,所以看不到你提交的文件,但是在服務器上git log一下,可以看到你提交的歷史記錄
初學Git及簡單搭建git服務器和客戶端
遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的。
把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令,git push origin master就行
要查看遠程庫的信息 使用 git remote
它會列出你指定的每一個遠程服務器的簡寫。 如果你已經克隆了自己的倉庫,那么至少應該能看到 origin - 這是 Git 給你克隆的倉庫服務器的默認名字
要查看遠程庫的詳細信息 使用 git remote –v
會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL,如果你的遠程倉庫不止一個,該命令會將它們全部列出

tortoiseGit的安裝使用

安裝

下載安裝包,選擇版本,地址:https://download.tortoisegit.org/tgit/
進入具體版本頁面后,根據Windows操作系統版本選擇相應的程序安裝包和中文語言包.
https://download.tortoisegit.org/tgit/2.5.0.0/ 這是2.5.0.0版本的,直接安裝即可

設置

在桌面右鍵選擇tortoiseGit,選擇設置,設置用戶名和郵箱,跟在git bash是一樣的,此時設置的是全局的
初學Git及簡單搭建git服務器和客戶端
進到本地倉庫目錄中可以針對項目設置局部配置
初學Git及簡單搭建git服務器和客戶端

克隆倉庫

ssh key的步驟前面已經說完了,然后就可以克隆倉庫進行使用了
選擇你想要克隆倉庫的文件夾,右鍵選擇Git克隆,等同於 git clone [url]
URL是你要克隆的服務器版本庫路徑,目錄是你要克隆到你本地的路徑
初學Git及簡單搭建git服務器和客戶端
填寫服務器的url,確定,在克隆過程中會要求輸入git用戶的密碼,然后在本地生成了倉庫gittest,在gittest下面有.git目錄,就是本地的版本庫目錄了,如果上一步選擇了克隆成純版本庫,就不會有.git目錄了,在本地一般不這樣做
初學Git及簡單搭建git服務器和客戶端
初學Git及簡單搭建git服務器和客戶端

增加文件到暫存區

編輯一個文件保存,在空白處右鍵選擇TortoiseGit,選擇添加,加到暫存區,也就是git add,也可以在下一步里面直接提交
初學Git及簡單搭建git服務器和客戶端

本地提交文件

右鍵選擇Git提交,填寫日志信息,不然不能提交然后點提交,這一步是將文件提交到你本地的倉庫,git中不能提交一個空文件夾,里面一定要有文件才行
第一行默認提交到master分支,也可以選擇新建分支,提交到新分支上
初學Git及簡單搭建git服務器和客戶端
沒有添加的文件也可以直接提交到版本庫,也可以選擇不提交未添加的文件
初學Git及簡單搭建git服務器和客戶端

推送到遠程倉庫

將文件推送到遠程倉庫,右鍵選擇tortoiseGit,選擇推送,將文件推送到服務器倉庫上
可以選擇推送哪個分支上的信息,也可以選擇推送到哪個遠程分支上
目標:選擇推送到哪個遠程端上,選擇管理,可以增加新的遠程端,也可以直接寫別的URL
初學Git及簡單搭建git服務器和客戶端
確定推送
初學Git及簡單搭建git服務器和客戶端
在服務器倉庫下執行git log可以看到你推送的文件,因為服務器上是裸倉庫,所以沒有工作目錄,看不到推送的文件

拉取文件和獲取文件

拉取和獲取的區別
拉取:git pull 在將遠程倉庫最新版本拉到本地的同時,將其合並到本地的當前 HEAD 中。
一般選擇非fast forward,會多生成一個commit 記錄,並強制保留分支的開發記錄,不會丟失分支信息,這對於以后代碼進行分析特別有用。
初學Git及簡單搭建git服務器和客戶端
獲取:git fetch 將遠程倉庫最新版本拉到本地,不會自動合並 ,絕不會更改任何本地分支
實際使用中 使用git fetch 更安全 在merge之前可以看清楚 更新情況 再決定是否合並
初學Git及簡單搭建git服務器和客戶端

創建分支,切換分支

右鍵TortoiseGit,選擇創建分支,填入分支名稱,選擇在哪個分支上新建分支,如果勾選切換新分支,分支創建后就直接在新分支上工作了,否則在TortoiseGit中選擇切換分支
在分支上修改后提交到分支
初學Git及簡單搭建git服務器和客戶端
初學Git及簡單搭建git服務器和客戶端

合並

切換回master分支,TortoiseGit選擇合並,選擇非快進式合並,合並后master分支上有了其他分支上提交的信息
初學Git及簡單搭建git服務器和客戶端

解決沖突

當主干與分支修改了同一個文件,合並時會產生沖突
初學Git及簡單搭建git服務器和客戶端
打開文件與在命令行中一樣,用<<<<<<<,=======,>>>>>>>標記出不同分支的內容
初學Git及簡單搭建git服務器和客戶端
右鍵TortoiseGit中選擇解決沖突
初學Git及簡單搭建git服務器和客戶端
雙擊該文件進行修改,左邊窗口是分支上的內容,右邊窗口是master上的內容,你要在下面的窗口上解決沖突,修改正確的文件內容,然后保存,然后將解決后的文件進行提交
初學Git及簡單搭建git服務器和客戶端

顯示日志

紅色代表當前分支,綠色代表本地分支,淺×××代表遠端分支,×××代表標簽
可以看到各版本提交的信息,及分支合並的信息,還有文件的操作狀態
初學Git及簡單搭建git服務器和客戶端
顏色可以在設置中更改
初學Git及簡單搭建git服務器和客戶端
可以在每一條信息上右鍵選擇與上一版本比較差異

以上就是TortoiseGit的基本操作了
下面是一些命令行操作

svn遷移到git服務器

根據需要,后期將會將svn上的數據遷移到git上

將svn庫克隆到本地

使用TortoiseGit克隆svn庫
初學Git及簡單搭建git服務器和客戶端
URL是svn的地址,是你要克隆的文件夾
因為我的svn庫不是標准的trunk、branch、tags結構,所以下面的不勾選,如果是標准的svn結構,請勾選
克隆需要一段時間,根據svn庫的大小而定

在git服務器上創建新的裸倉庫

使用git init --bare svnrepo.git命令

將本地倉庫推送到git服務器

先建立遠端倉庫,在本地倉庫內右鍵選擇TortoiseGit,設置,然后選擇遠端,在右側URL中填寫git服務器倉庫地址,就是剛剛在git服務器上新建的裸倉庫,origin是默認的遠端名字,然后點擊確定
初學Git及簡單搭建git服務器和客戶端
遠端建立好后,就可以將本地克隆到的倉庫推送到服務器上了
在本地倉庫做一些修改,記住要先在本地進行提交,然后再推送到服務器上
TortoiseGit—>推送 就可以了,由於服務器上是裸倉庫,所以沒有工作區,看不到文件,git log一下就可以看到你剛才修改文件的提交記錄了

基礎命令

我是在linux上操作的,算是本地倉庫吧,不涉及遠程庫;在linux上操作與在windows上相同

把文件添加到版本庫中

編輯一個readme.txt文件,將文件加入版本庫中
[root@localhost repository]# git add readme.txt #將工作區中的文件添加到暫存區了

將文件提交到版本庫

[root@localhost repository]# git commit -m “提交readme”
-m 是提交信息,便於查看提交了什么東西,這一步是將暫存區中的文件提交到倉庫了

查看是否還有文件未提交

[root@localhost repository]# git status #On branch master nothing to commit (working directory clean)

這樣說明沒有任何文件未提交,工作區是干凈的

修改readme文件后保存,不進行任何操作,再查看狀態

[root@localhost repository]# git status #On branch master #Changed but not updated: #(use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a")

上面的命令告訴我們 readme.txt文件已被修改,但是並沒有提交

查看readme.txt文件修改了什么內容

[root@localhost repository]# git diff
diff --git a/readme.txt b/readme.txt
index 92e045e..d94ee74 100644
--- a/readme.txt +++ b/readme.txt @@ -5,4 +5,3 @@ 666666 777777 999999 -000

可以看到,少了一行000
知道了對readme.txt文件做了什么修改后,我們可以放心的提交到倉庫了,提交修改和提交文件是一樣的2步(第一步是git add 第二步是:git commit)。

[root@localhost repository]# git add readme.txt [root@localhost repository]# git commit -m "readme刪除000"

查看歷史記錄

[root@localhost repository]# git log commit ffc46d25feacd0ae1926ace37efecd116402503e #版本號 Author: bai <xxx@qq.com> Date: Tue Jan 9 16:49:18 2018 +0800 readme刪除000 #最近一次提交內容,也就是commit -m 寫的內容 commit 1fac1a93037444bfbd59e51b57c511aaa0a9578f Author: bai <xxx@qq.com> Date: Mon Jan 8 11:26:26 2018 +0800 readme增加222222 commit 876477f1b209ba61de4248ff26c2c1a098520295 Author: bai <xxx@qq.com> Date: Mon Jan 8 11:20:45 2018 +0800 提交readme.txt

如果嫌上面顯示的信息太多的話,我們可以使用命令 git log –pretty=oneline

[root@localhost repository]# git log --pretty=oneline ffc46d25feacd0ae1926ace37efecd116402503e readme刪除000 1fac1a93037444bfbd59e51b57c511aaa0a9578f readme增加222222 876477f1b209ba61de4248ff26c2c1a098520295 提交readme.txt

版本回退

[root@localhost repository]# git reset --hard HEAD^ #回退到上一版本

[root@localhost repository]# git log commit 1fac1a93037444bfbd59e51b57c511aaa0a9578f Author: bai <xxx@qq.com> Date: Mon Jan 8 11:26:26 2018 +0800 readme增加222222 commit 876477f1b209ba61de4248ff26c2c1a098520295 Author: bai <xxx@qq.com> Date: Mon Jan 8 11:20:45 2018 +0800 提交readme.txt

可以看到刪除000的操作沒有了
如果想要回退到上上個版本就把HEAD^ 改成 HEAD^^,以此類推
如果想回到100個版本之前的話,就git reset --hard HEAD~100

回退到指定版本

[root@localhost repository]# git reset HEAD 版本號

獲得版本號

[root@localhost repository]# git reflog 19ecf86 HEAD@{0}: HEAD^: updating HEAD ffc46d2 HEAD@{1}: commit: readme刪除000

ffc46d2就是版本號

撤銷修改

1.如果已經提交了的話,就直接回退到上一版本
2.如果沒有添加到暫存區的話,使用git checkout -- 文件名 撤銷工作區的所有修改
[root@localhost repository]# git checkout -- readme.txt
3.如果已經添加到暫存區的話,想丟棄修改
[root@localhost repository]# git reset HEAD readme.txt
然后再重復第二步

刪除文件

[root@localhost repository]# git rm readme.txt [root@localhost repository]# git commit -m “刪除readme”

創建分支

[root@localhost repository]# git checkout –b fenzhi 這個命令相當於兩條命令 git branch fenzhi 創建分支 git checkout fenzhi 切換到該分支

我們在分支上修改了文件內容提交后,在主分支上是看不到剛才修改的內容的

查看當前分支

[root@localhost repository]# git branch * fenzhi master

帶星號的則代表當前在該分支上

合並分支

[root@localhost repository]# git checkout master #在master分支上進行合並 [root@localhost repository]# git merge --no-ff fenzhi

在分支上修改內容后,與主分支合並,合並后就統一了文件內容

刪除分支

[root@localhost repository]# git branch -d fenzhi

解決沖突

當你在主分支上和其他分支上修改了同一個文件並且都提交了,當在主分支上合並的時候就會產生沖突
初學Git及簡單搭建git服務器和客戶端
查看文件內容是這樣的
初學Git及簡單搭建git服務器和客戶端
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<< HEAD是指主分支修改的內容,>>>>fenzhi 是指fenzhi上修改的內容
我們可以手動修改文件,解決沖突,然后在提交到版本庫

用git log查看分支歷史

git log --graph --pretty=oneline --abbrev-commit
初學Git及簡單搭建git服務器和客戶端

隱藏工作區

在開發中,會經常碰到bug問題,那么有了bug就需要修復,每個bug都可以通過一個臨時分支來修復,修復完成后,合並分支,然后將臨時的分支刪除掉。比如我在開發中接到一個404 bug時候,我們可以創建一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。
工作進行到一半時候,我們還無法提交,比如我這個分支bug要2天完成,但是404 bug需要5個小時內完成。怎么辦呢?還好,Git還提供了一個stash功能,可以把當前工作現場 ”隱藏起來”,等以后恢復現場后繼續工作。
在你需要隱藏的dev分支下執行git stash,這時候雖然dev分支上的內容還沒有提交,但是git status看一下工作區是干凈的,也就是dev的工作現場被隱藏了
現在創建404分支來修復bug了。首先我們要確定在哪個分支上修復bug,比如我現在是在主分支master上來修復的,現在我要在master分支上創建一個臨時分支修復完成后,切換到master分支上,並完成合並,最后刪除404分支。
然后我們回到dev分支上干活,工作區是干凈的,那么我們工作現場去哪里呢?我們可以使用命令 git stash list來查看下
工作區是干凈的,那么我們工作現場去哪里呢?我們可以使用命令 git stash list來查看下。Git把stash內容存在某個地方了,但是需要恢復一下,可以使用如下2個方法:
git stash apply恢復,恢復后,stash內容並不刪除,你需要使用命令git stash drop來刪除。
另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM